[英]Disable scrolling of a ListView contained within a ScrollView
我想為我的用戶顯示一個“個人資料”屏幕。
它必須具有三個視圖(2個Buttons
和一個ImageView
)以及一個ListView
才能顯示該用戶制作的內容。
但是,我不希望ListView
滾動。 相反,我希望它盡可能大,並將所有視圖放入ScrollView
,以便使用ListView
滾動出前三個視圖。 當然,這不能按預期工作。
我所有的三個項目都在LinearLayout
。 我想將它們設置為ListView
的第一項,但這導致它們可以被選擇為第一項,並且必須進行一些不必要的編碼。
有沒有一種簡單的方法可以執行此操作,還是我必須堅持將Layout設置為ListView中的第一項?
我為此找到了一個非常簡單的解決方案。 只需獲取列表視圖的適配器並在顯示所有項目時計算其大小即可。 優點是此解決方案也可以在ScrollView中使用。
例:
public static void justifyListViewHeightBasedOnChildren (ListView listView) {
ListAdapter adapter = listView.getAdapter();
if (adapter == null) {
return;
}
ViewGroup vg = listView;
int totalHeight = 0;
for (int i = 0; i < adapter.getCount(); i++) {
View listItem = adapter.getView(i, null, vg);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams par = listView.getLayoutParams();
par.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
listView.setLayoutParams(par);
listView.requestLayout();
}
通過您的ListView對象調用此函數:
justifyListViewHeightBasedOnChildren(myListview);
上面顯示的功能是對以下內容的修改: 禁止在列表視圖中滾動
將適配器設置為列表視圖后,請注意調用此功能。 如果適配器中條目的大小已更改,則還需要調用此函數。
將它們作為第一項添加到ListView似乎是一個很好的解決方案。
要使View不可選擇,只需獲取view和.setClickable(false)
。
我會在ListView
頂部添加一個具有不可見背景的View
。 設置一個View.OnTouchListener()
。 並通過返回消耗事件true
在onTouch()
的方法View.OnTouchListener()
當您希望列表再次向后滾動時,請刪除透明View
上設置的觸摸偵聽器
如果必須在列表視圖中顯示有限數量的項目,並且要停止滾動列表視圖,則必須使listview的高度大於項目的總高度。
例如,您要顯示3個項目。 (行高為30)。 那么項目的總高度將變為3 x 30dp = 90dp,
所以現在您必須將listview的高度設置為大於90。例如:100dp。 所以現在您的列表視圖在任何情況下都不會滾動。
我認為最好的方法是將2個按鈕和圖像視圖放在LinearLayout(或任何適合您的布局)中,然后使用addHeaderView方法將此布局添加為列表標題:
http://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.view.View )
使用以下指令:
name_lista.getLayoutParams (). height = new_size
new_size是一個變量,您將根據列表中元素的數量進行計算,例如:
new_size = 100 * list_size;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.