ListView的属性及与ScrollView连用问题

来源:互联网 发布:卖家网数据套餐 编辑:程序博客网 时间:2024/05/20 03:42
 1.android:stackFromBottom="true"让其内容从底部开始显示
2.android:transcriptMode=diszbled取消transcriptmode模式/normal当接收到数据改变的通知,并且当仅仅最后一个选项已经显示在屏幕的时候自动滑到底部/alwaysScroll无论当前列表显示什么选项,列表将会自动滑动到底部显示最新的选项
3.android:cacheColorHint设置listView的背景时,要设置这个属性为"#00000000"透明
4.android:divider分割线(图片、颜色)如果设置为@null.就是没有分隔线,用颜色时。要设置dividerheight
5.android:listSelector设置按下去的颜色
6.当item里面有Button等控件时就会失去焦点导致无法响应事件,这时要在item的布局中设置android:descendantFocusability="blocksDescendants"
7.srcllowview与listview连用时,会出现无法滑动,或者显示不全,只显示一行等问题,这时需要计算listview的高度,在设置适配器之后调用该方法(可能最后一行显示不全,这时要将params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));改为params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1))+一个高度;)但是这个方法有个两个细节需要注意:
        一是Adapter中getView方法返回的View的必须由LinearLayout组成,因为只有LinearLayout才有measure()方法,如果使用其他的布局如RelativeLayout,在调用listItem.measure(0, 0);时就会抛异常,因为除LinearLayout外的其他布局的这个方法就是直接抛异常的,没理由…。我最初使用的就是这个方法,但是因为子控件的顶层布局是RelativeLayout,所以一直报错,不得不放弃这个方法。
        二是需要手动把ScrollView滚动至最顶端,因为使用这个方法的话,默认在ScrollView顶端的项是ListView,具体原因不了解,求大神解答…可以在Activity中设置:
/**
* 动态设置ListView的高度
* @param listView
*/
public static 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);
}
原创粉丝点击