我們在做android開發的時候,經常會遇到Scrollview嵌套ListView的問題,其中有幾點問題,就是scrollview和listview都會滑動。
第一個問題,解決listview的滑動:設置listview不滑動
重寫listview,重寫listview中的onmeasure方法
/**
* 設置不滾動
*/
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
第二個問題,焦點問題,剛進入這個頁面時焦點往往會移到listview上面去,所以
調用下面一個方法,將焦點移到scrollview上,並且定位到頂部
private void scrollToTop() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
getView(R.id.topLayout).requestFocus();
getView(R.id.topLayout).setFocusable(true);
getView(R.id.topLayout).setFocusableInTouchMode(true);
scrollView.fullScroll(ScrollView.FOCUS_UP);
}
}, 500);
}
第三個問題,因爲listview之間的item會有一些divider分隔,所以有些時候會出現listview中的item顯示不全,所以現在要根據實際
通過計算將listview的實際高度給計算出來:
/**
* 根據字item的高度設置listview的高度
* @param listView
*/
public void setListViewHeightBasedOnChildren(ListView listView) {
if(listView == null) return;
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
這樣就解決了其中最重要的三個問題。。。有什麼問題還請大家不吝賜教。。