• 在ScrollView添加一个ListView造成的滚动问题的简单解决办法()


    正常来说,在ScrollView添加一个ListView后在真机上只会显示ListView的一行多一点,我也不理解为什么会这样,后来我把ListView的layout_height改成400dip,而不是用match_parent和wrap_content,我发现这样的话ListView就显示的多了很多。所以就产生了把ListView所有的item的高度算出来给ListView设置的想法。下面是代码: 
    Java代码
    1. public void setListViewHeightBasedOnChildren(ListView listView) {
    2.         ListAdapter listAdapter = listView.getAdapter(); 
    3.         if (listAdapter == null) {
    4.             return;
    5.         }
    6.         int totalHeight = 0;
    7.         for (int i = 0; i < listAdapter.getCount(); i++) {
    8.             View listItem = listAdapter.getView(i, null, listView);
    9.             listItem.measure(0, 0);
    10.             totalHeight += listItem.getMeasuredHeight();
    11.         }
    12.         ViewGroup.LayoutParams params = listView.getLayoutParams();
    13.         params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    14.         params.height += 5;//if without this statement,the listview will be a little short
    15.         listView.setLayoutParams(params);
    16.     }
    复制代码
    在代码的倒数第二行二我又给加了5个像素,这是因为我在listview的属性里面添加了padding=5dip。 
    然后每次ListView的数据一有变化就用这个函数设置一下就好了,不过这样总感觉效率很低,希望有达人给指点一下。 

    简单来说就是把layout_height写死,这种办法也很适用于GridView(如果能估计得出GridView的高度的话)。 


    listview与ScrollView老问题的另类解法 
    这几天一直被listview怎么合理的放进scorllview中的问题困扰,尝试过把listview放入scorllview中的朋友都知道,被放入的listview显示是有问题的,无论怎么设置layout都只显示大概2行的高度,看起来很郁闷,更别说美观了,后来上网查询了一下,解决方法有的是用linearlayout替换listview,还有修改onmeasure的,我比较懒个人感觉很麻烦不喜欢,终于想出了一个还算和谐的解决方法:xml中的textlist设置如下: 
    1. <?xml version="1.0" encoding="UTF-8"?> 
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    3.     android:layout_width="fill_parent" 
    4.     android:layout_height="wrap_content" 
    5.     android:orientation="vertical" 
    6.     android:background="#44444444"> 
    7. <ScrollView 
    8.      android:layout_width="fill_parent" 
    9.      android:layout_height="wrap_content"> 
    10.     <LinearLayout 
    11.             android:id="@+id/ll1" 
    12.             android:layout_width="fill_parent" 
    13.             android:layout_height="wrap_content" 
    14.             android:scrollbars="vertical" 
    15.             android:orientation="vertical" 
    16.             android:paddingLeft="15dp" 
    17.             android:paddingRight="15dp" 
    18.             android:paddingTop="30dp" 
    19.             android:paddingBottom="30dp" 
    20.             android:background="#ff888888"> 
    21.             <TextView 
    22.                     android:text="あ" 
    23.                     android:textColor="#ffeeeeee" 
    24.                     android:textSize="18sp" 
    25.                     android:layout_width="fill_parent" 
    26.                     android:layout_height="wrap_content"></TextView> 
    27.             <ListView 
    28.                     android:scrollbars="none" 
    29.                     android:stackFromBottom="true" 
    30.                     android:id="@+id/lv0" 
    31.                     android:layout_width="fill_parent" 
    32.                     android:layout_height="20dp"></ListView> 
    33.                     </LinearLayout> 
    34. </ScrollView> 
    35. </LinearLayout>
    复制代码
    其中的textview是我做的东西要用到的,和方法无关可以不看,然后就是在java中重新设置listview的高度了,目的是把listview“撑”开: 
    LinearLayout.LayoutParams  lp5 =new LinearLayout.LayoutParam(LayoutParams.FILL_PARENT, listItem.size()*51-1); 
    其中第一个属性不必说了,第二个是为了计算listview要设置的总高度用的,51是我事先设置好的一行的高度(50)+每行之间的间隔(1)而得来的,listItem.size()是我要显示的行数,用.setLayoutParams(lp5);来重新设置高度,其他别的设置跟以前一样
     
     

    android用户界面之ScrollView教程实例汇总
    http://www.apkbus.com/android-51428-1-1.html
    (出处: http://www.apkbus.com/)

  • 相关阅读:
    十道海量数据处理面试题与十个方法大总结
    TopK的一个简单实现
    Spark1.0.0 学习路线指导
    Apache Spark源码走读之1 -- Spark论文阅读笔记
    倾情大奉送--Spark入门实战系列
    分布式发布订阅消息系统 Kafka 架构设计
    hive入门学习线路指导
    (5.3.1)数据库迁移——数据库迁移解决孤立用户与权限问题
    Shell初学(八)linux下的ACL
    Shell初学(七)linux账户管理/群组管理
  • 原文地址:https://www.cnblogs.com/manmanlu/p/4302571.html
Copyright © 2020-2023  润新知