解决ScrollView下嵌套ListView、GridView显示不全的问题(冲突)

原文地址:http://blog.csdn.net/cs_li1126/article/details/12906203

一.使用网上用的动态改变listview高度的方法,该方法只适用于item布局是LinearLayout布局的情况,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。所以使用限制较大。

[java] view plaincopy

  1. public class Utility {
  2. public static void setListViewHeightBasedOnChildren(ListView listView) {
  3. //获取ListView对应的Adapter
  4. ListAdapter listAdapter = listView.getAdapter();
  5. if (listAdapter == null) {
  6. // pre-condition
  7. return;
  8. }
  9. int totalHeight = 0;
  10. for (int i = 0, len = listAdapter.getCount(); i < len; i++) { //listAdapter.getCount()返回数据项的数目
  11. View listItem = listAdapter.getView(i, null, listView);
  12. listItem.measure(0, 0); //计算子项View 的宽高
  13. totalHeight += listItem.getMeasuredHeight(); //统计所有子项的总高度
  14. }
  15. ViewGroup.LayoutParams params = listView.getLayoutParams();
  16. params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
  17. //listView.getDividerHeight()获取子项间分隔符占用的高度
  18. //params.height最后得到整个ListView完整显示需要的高度
  19. listView.setLayoutParams(params);
  20. }
  21. }

二.网上有帖子说在ScrollView中添加一属性 android:fillViewport="true" ,这样就可以让ListView全屏显示了。在我机器上测试失败了。

三:重写ListView、gridView(推荐)

重写ListView:

[java] view plaincopy

  1. public class MyListView extends ListView {
  2. public MyListView(Context context) {
  3. // TODO Auto-generated method stub
  4. super(context);
  5. }
  6. public MyListView(Context context, AttributeSet attrs) {
  7. // TODO Auto-generated method stub
  8. super(context, attrs);
  9. }
  10. public MyListView(Context context, AttributeSet attrs, int defStyle) {
  11. // TODO Auto-generated method stub
  12. super(context, attrs, defStyle);
  13. }
  14. @Override
  15. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  16. // TODO Auto-generated method stub
  17. int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
  18. MeasureSpec.AT_MOST);
  19. super.onMeasure(widthMeasureSpec, expandSpec);
  20. }
  21. }

重写GridView:

[java] view plaincopy

    1. /**
    2. *自定义gridview,解决ScrollView中嵌套gridview显示不正常的问题(1行)
    3. */
    4. public class MyGridView extends GridView{
    5. public MyGridView(Context context, AttributeSet attrs) {
    6. super(context, attrs);
    7. }
    8. public MyGridView(Context context) {
    9. super(context);
    10. }
    11. public MyGridView(Context context, AttributeSet attrs, int defStyle) {
    12. super(context, attrs, defStyle);
    13. }
    14. @Override
    15. public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    16. int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
    17. MeasureSpec.AT_MOST);
    18. super.onMeasure(widthMeasureSpec, expandSpec);
    19. }
    20. }

解决ScrollView下嵌套ListView、GridView显示不全的问题(冲突)

时间: 2024-10-26 09:44:32

解决ScrollView下嵌套ListView、GridView显示不全的问题(冲突)的相关文章

解决ScrollView下嵌套ListView或Gridview进页面不在顶部的问题

最近项目用到了scrollview内部嵌套ListView或Gridview,本来这样做不太好,但是接口不提供网页资源,只有自己一个一个View的拼凑了,苦逼的程序猿,大家都懂的, 但是写好后发现一个问题,每次进入这个页面后,scrollview不是显示在顶部,而是底部或者中间,令老夫很是惆怅啊,经过千百度万谷歌,终于试出了一个方法,可以解决这个问题,但是也不是完美解决,偶尔也会没效果的,代码如下: scrollview.smoothScrollTo(0,0); 在listview绘制好数据后使

解决ScrollView下嵌套ListView、GridView显示不全的问题

/** * 自定义gridview,解决ListView中嵌套gridview显示不正常的问题(1行半) * @author wangyx * @version 1.0.0 2012-9-14 */ public class MyGridView extends GridView{ public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context

解决ScrollView下嵌套ListView进页面不在顶部的问题

为了解决scrollview和listview冲突  设置了listview的高度   结果进页面就不是在顶部了 . 解决方案1:ScrollView.post() Java代码   sv_container.post( new Runnable() { public void run() { //sv_container.fullScroll(ScrollView.FOCUS_UP); sv_container.scrollTo(0, 0) ; } }); [注意]方法中开一个新线程是必要的.

解决ScrollView下嵌套ListView/GridView进页面不在顶部的问题以及数据显示不全的问题( 只显示一行)

在网上看到如下的解决方案,我现在定义了多个listview,所以出现了有时候起作用有时候不起作用,错误的解决方法如下: 错误解决方案1: 错误解决方案2: 正确解决方案,重写ScrollView,添加如下方法 正确解决方案: /** * 禁止ScrollView内布局变化后自动滚动 */ @Override protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) { return 0; } 解决了上面的问题,其实在Scr

笔记整理1_1:解决在ScrollView中嵌套ListView不能显示全部item的问题

package com.example.scrollview; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import com.pb.custo

解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题

在一个滑动控件或者是布局里面,添加另外一个可以滑动的控件,通常会造成一些莫名其妙的问题.今天主要介绍在工作中遇到的,在ScrollView布局中嵌套Listview显示不正常,和在Listview中嵌套Listview的滑动冲突的问题. 1.ScrollView布局中嵌套Listview显示不正常的解决方案 目前来说,解决这个问题有好几种解决方案,这里只介绍其中两种比较简单易行的其中两种. (1)自定义一个Listview,继承自Listview,代码如下: public class ListV

ScrollView嵌套ListVIew/GridView显示问题

ScrollView嵌套ListView/GridView的显示问题可以说是安卓开发者都会遇到的问题,同时处理起来也比较麻烦,最近也遇到了这种问题,在这整理一下做个记录. 1.对于ListView最常用的就是动态的根据Adapter来计算列表的高度,在设置完列表之后调用一下对应的计算方法即可: /** * 动态设置ListView的高度 * * @param listView */ public static void setListViewHeightBasedOnChildren(ListV

Android ScrollView中嵌套ListView只显示一行的解决办法

Android编程中,ScrollView嵌套ListView时,会无法正确的计算ListView的大小.解决的办法如下: (非原创,网上搜到的解决方法) public class MainActivity extends Activity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s

解决ScrollView中嵌套ListView滚动效果冲突问题

在ScrollView中嵌套使用ListView,ListView只会显示一行到两行的数据.起初我以为是样式的问题,一直在对XML文件的样 式进行尝试性设置,但始终得不到想要的效果.后来在网上查了查,ScrollView和ListView两个View都有滚动的效果,在嵌套使用时起了冲 突,一般不建议两者套用. 下面说说具体解决方案.方案的主要思路就是根据ListView子项重置其高度. 解决方案代码如下: java代码: [html] view plain copy print? /** * 重