解决显示不全问题:
public static void setListViewHeightBasedOnChildren(ListView listView, int maxCount) {
try {
// 获取ListView对应的Adapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
int showCount = listAdapter.getCount() > maxCount ? maxCount : listAdapter.getCount();
for (int i = 0, len = showCount; i < len; i++) {
// listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
// 计算子项View 的宽高
listItem.measure(0, 0);
// 统计所有子项的总高度
totalHeight += listItem.getMeasuredHeight();
}
LogUtil.i(TAG, "setListViewHeightBasedOnChildren totalHeight = " + totalHeight);
ViewGroup.LayoutParams params = listView.getLayoutParams();
// listView.getDividerHeight()获取子项间分隔符占用的高度
params.height = totalHeight + (listView.getDividerHeight() * (showCount - 1));
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
} catch (Exception e) {
e.printStackTrace();
}
}
解决位置不是顶部方法:
-
myScrollView.smoothScrollTo(0,20);
需在listview数据加载完成后调用
-
在代码里去掉listview的焦点
lv.setFocusable(false);
-
Listview外套一层LinearLayout
-
跟EditText一样,在父元素的属性下面下下面这两行即可
android:focusableInTouchMode=”true”
android:focusable=”true” -
最开始的时候让最上面其中一个控件获得焦点,滚动条自然就到顶部去了,如下:
txtBaseMsg.setFocusable(true);
txtBaseMsg.setFocusableInTouchMode(true);
txtBaseMsg.requestFocus(); -
再ScrollView内控件滑动,onTouch事件Scroll屏蔽如下:
if (event.getAction() == MotionEvent.ACTION_UP) {
mScrollView.requestDisallowInterceptTouchEvent(false);
} else {
mScrollView.requestDisallowInterceptTouchEvent(true);
}