14

我在ListView中有许多元素滚动到屏幕外。

我希望在视图的末尾有空白。也就是说,用户应该能够滚动过去最后一个元素,以使最后一个元素位于视口的中间。

我可以使用OverScroller,但我认为这只会使 View 具有像人们在 iPhone 上经常看到的那样有弹性的效果。

有什么我可能忽略的吗?

滚动到底部的屏幕应如下所示: Android 模型,其中有许多标签,其中最后一个位于屏幕中间附近

4

5 回答 5

46

接受的答案太复杂了, addFooterView 不适合这种事情。正确和简单的方法是设置paddingTop和paddingBottom,并且需要将clipToPadding设置为“false”。在列表视图或网格视图中,添加以下内容:

    android:paddingTop="100dp"
    android:paddingBottom="100dp"
    android:clipToPadding="false"

您将在顶部和底部获得随手指滚动而移动的空白空间。

于 2014-02-18T01:39:28.637 回答
15
  1. 膨胀您选择的任何布局(这可能是一个 XML 和 ImageView,没有可绘制的并且您选择的设置高度和宽度)
  2. 测量屏幕高度并创建新的 LayoutParams 并将其高度设置为屏幕高度的 1/2
  3. 在膨胀视图上设置新的布局参数
  4. 使用 ListView 的addFooterView()方法将该视图添加到列表底部(还有一个addHeaderView()

测量屏幕高度的代码

 WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
 Display display = wm.getDefaultDisplay();
 int screenHeight = display.getHeight();

设置半屏高度的代码:

 View layout = inflater.inflate(R.layout.mylistviewfooter, container, false);
 ViewGroup.LayoutParams lp = layout.getLayoutParams();
 lp.height = screenHeight/2;
 layout.setLayoutParams(lp);
 myListView.addFooterView(layout);

旁白:当您向任何列表视图添加页脚或标题视图时,必须在添加适配器之前完成。此外,如果您需要在执行此操作后获取您的适配器类,您需要知道调用列表视图的适配器getAdapter()将返回一个HeaderViewListAdapter的实例,您需要在其中调用它的getWrappedAdapter方法 像这样:

 MyAdapterClassInstance myAdapter = (MyAdapterClassInstance) ((HeaderViewListAdapter) myListView.getAdapter()).getWrappedAdapter();
于 2012-11-13T18:14:07.877 回答
0

这 100% 有效。在适配器中设置你的代码是这样的

   //in getCount
   @Override
   public int getCount() {
   return ArrayList.size()+1;
      }
    //in getview make your code like this
    public View getView(final int i, View view, ViewGroup viewGroup) {

    view = inflter.inflate(R.layout.yourlayout, null);

    if(i<getCount()-1) {
     //your code
    }
    else{
    ViewGroup itemContainer =(ViewGroup) view.findViewById(R.id.container);
                itemContainer.setVisibility(View.INVISIBLE);
    }

    Return view;
    }
于 2017-01-16T20:38:40.550 回答
0

如果您的应用程序中有多个列表视图,请创建页脚的 xml,如下所示:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:minHeight="200dp"
android:layout_width="match_parent"
android:layout_height="200dp"></LinearLayout>

然后在代码中,使用这个:

listView.addFooterView(LayoutInflater.from(getActivity()).inflate(R.layout.empty200, null));
于 2019-06-06T10:13:19.003 回答
-3

尝试以下操作:

View footer = new View(getActivity());
footer.setLayoutParams( new AbsListView.LayoutParams( LayoutParams.FILL_PARENT, 100 )); 
// 100 is the height, you can change it.
mListView.addFooterView(footer, null, false);
于 2013-09-18T00:21:07.430 回答