我有一個ListView與一堆物品在裏面。如何使頂部和底部商品的頂部邊距爲10dp,底部商品的底部邊距爲10dp?現在我可以在ListView上使用填充或邊距來做到這一點,但結果是,當您滾動ListView的邊緣時,屏幕底部會變爲10dp。無論如何圍繞這個?我也嘗試在我的適配器的getView方法中設置邊距,但是我沒有看到AbsListView.LayoutParams的任何邊距選項。任何幫助都會很棒。Android ListView的填充內容不移動ListView的高度?
感謝
我有一個ListView與一堆物品在裏面。如何使頂部和底部商品的頂部邊距爲10dp,底部商品的底部邊距爲10dp?現在我可以在ListView上使用填充或邊距來做到這一點,但結果是,當您滾動ListView的邊緣時,屏幕底部會變爲10dp。無論如何圍繞這個?我也嘗試在我的適配器的getView方法中設置邊距,但是我沒有看到AbsListView.LayoutParams的任何邊距選項。任何幫助都會很棒。Android ListView的填充內容不移動ListView的高度?
感謝
的竅門是在您的視圖定義android:clipToPadding="false"
,例如:
<ListView android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="16dip"
android:paddingBottom="16dip"
android:clipToPadding="false" />
這正是我正在尋找的,並且是一個簡單的解決方案。這工作得很好,我正在構建Android 2.1-update1。 – Bobbake4
爲什麼只能在Android 3.0以上?根據Android的參考,這個功能從一開始就一直存在(API Level 1):http://developer.android.com/reference/android/view/ViewGroup.html#setClipToPadding(boolean) – jenzz
lol花了45分鐘嘗試以使其適用於各種填充和邊距設置。甚至來到clipToPadding,但誤解了它,並將其設置爲true :)謝謝 –
爲什麼不直接檢查相對於你的列表的大小項目的位置:
填充:
public View getView(int position, View convertView, ViewGroup parent)
{
//recycle views and whatever else you normally would do goes here..
//...
//...
if (position == 0){
convertView.setPadding(0, 10, 0, 0); //padding on top for top item
}
else if (position == getCount() - 1){
convertView.setPadding(0, 0, 0, 10); //padding on bottom for bottom item
}
else{
convertView.setPadding(0, 0, 0, 0); //no padding
}
}
頁邊距使用
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(left, top, right, bottom);
convertView.setLayoutParams(lp);
防爆:
public View getView(int position, View convertView, ViewGroup parent)
{
//recycle views and whatever else you normally would do goes here..
//...
//...
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
if (position == 0){
lp.setMargins(0, 10, 0, 0); //margin on top for top item
}
else if (position == getCount() - 1){
lp.setMargins(0, 10, 0, 10); //margin on bottom for bottom item
}
else{
lp.setMargins(0, 0, 0, 0); //no margin
}
convertView.setLayoutParams(lp);
}
這是提供的,您已經爲適配器正確實施了getCount()方法。
這是一個很好的解決方案。使用G +類型的標題(在滾動上下滾動時)使得不可能擁有一個標題視圖,並且對列表視圖本身具有填充。 –
通過使用頁眉和頁腳,您可以在滾動區域內的ListView頂部和底部獲得空間。這裏有一個簡單的例子:
定義你的填料看法,我叫header_footer.xml:
<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="10dp"/>
現在你onCreate
方法是這樣的,假設你命名你的ListView listView
:
final LayoutInflater inflater =
(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View headerFooter = inflater.inflate(R.layout.header_footer, null);
listView.addFooterView(headerFooter);
listView.addHeaderView(headerFooter);
然後設置你的適配器。
偉大的作品,我相信在所有的Android版本,而使用clipToPadding(上述解決方案)只適用於某些androd版本 – Don
有用的答案,謝謝!我編輯它只是爲了消除不必要的複雜性。一個簡單的'View'將會很好 - 在另一個'LinearLayout'內不需要'LinearLayout'。 –
討厭的建議,但如何在第一/最後一個項目視圖頂部/底部填充?你將不得不在'getView'的所有視圖中檢查並設置它... – Knickedi