前些日子在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便会出问题,即GridView会显示不全。

解决办法,自定义一个GridView控件

  1. public class MyGridView extends GridView {
  2. public MyGridView(Context context, AttributeSet attrs) {
  3. super(context, attrs);
  4. }
  5. public MyGridView(Context context) {
  6. super(context);
  7. }
  8. public MyGridView(Context context, AttributeSet attrs, int defStyle) {
  9. super(context, attrs, defStyle);
  10. }
  11. @Override
  12. public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  13. int expandSpec = MeasureSpec.makeMeasureSpec(
  14. Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
  15. super.onMeasure(widthMeasureSpec, expandSpec);
  16. }
  17. }

该自定义控件只是重写了GridView的onMeasure方法,使其不会出现滚动条,ScrollView嵌套ListView也是同样的道理,不再赘述。

XML布局代码

  1. <ScrollView Android:layout_height="wrap_content"
  2. Android:layout_width="fill_parent" android:id="@+id/scroll_content">
  3. <com.yourclass.MyGridView xmlns:Android="http://schemas.android.com/apk/res/android"
  4. Android:id="@+id/grid_view" android:layout_width="fill_parent"
  5. Android:layout_height="wrap_content" android:numColumns="auto_fit"
  6. Android:horizontalSpacing="1dip" android:verticalSpacing="1dip"
  7. Android:columnWidth="150dip" android:stretchMode="columnWidth"
  8. Android:gravity="center">
  9. </com.yourclass.MyGridView>
  10. </ScrollView>

Java调用代码

  1. MyGridView gridview = (MyGridView) findViewById(R.id.grid_view);
  2. gridview.setAdapter(new ImageAdapter(this));

========================

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

  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. }

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

3.重写ListView、gridView(推荐):

重写ListView

  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

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

ScrollView--嵌套GridView的解决办法的更多相关文章

  1. Android开发:ScrollView嵌套GridView的解决办法

    Android开发:ScrollView嵌套GridView的解决办法   前些日子在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便 ...

  2. Android中ScrollView嵌套GridView,解决GridView显示不全的问题

    /** * 自定义gridview,解决ScrollView中嵌套gridview显示不正常的问题(1行半) * */ public class MyGridView extends GridView ...

  3. 【问题汇总】ScrollView嵌套GridView的问题

    在开发中遇到了ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当它们碰到一起的时候便会出问题,即GridView会显示不全. 解决办法,自定义一个GridView控件. [ ...

  4. Android开发随笔之ScrollView嵌套GridView[ 转]

    今天在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便会出问题,即GridView会显示不全,为了解决这个问题查了N多资料,某个谷歌的 ...

  5. scrollview嵌套gridview滑动问题

    在开发过程总遇到ScrollView嵌套GridView,由于这两种控件都带有滚动条,当他们碰到一起的时候便会出问题,问题是gridview不滚动,并且只显示两行,为此看了官方文档,谷歌回答滚动里面没 ...

  6. 阻尼回弹效果的ScrollView嵌套GridView

    以前写过一篇带阻尼回弹效果的ScrollView,但是有些小问题,于是又重新整理了一下,这篇文章一是一个带阻尼的Scrollview,再个就是Scrollview嵌套GridView实现,而GridV ...

  7. Android ScrollView嵌套GridView导致GridView只显示一行item

    Android ScrollView嵌套GridView导致GridView只显示一行item Android ScrollView在嵌套GridView时候,会导致一个问题发生:GridView只显 ...

  8. 在ScrollView嵌套GridView,使GridView不滚动

    <ScrollView>       ……   <LinearLayout> </LinearLayout>       ……</ScrollView> ...

  9. ScrollView嵌套GridView,GridView显示不全

    最近开发有个需求是以A-Z的方式区分全国城市(搜索功能),并实现字母索引的功能(有点类似微信,不过比较坑的是用的是GridView, 并且GridView上面还有几个LinearLayout). 详细 ...

随机推荐

  1. kuangbin_ShortPath J (POJ 1511)

    其实虽然一开始有被这个题的8000MS 和 256MB限制又被吓到 但是严格来说跟之前的POJ 3268是一样的做法只是数据大了点 但是问题就出在数据大了点上 其实严格来说也不大 1e6 数组加起来大 ...

  2. 黑马程序员——JAVA基础之简述 类的继承、覆写

    ------- android培训.java培训.期待与您交流! ---------- 继承的概述: 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只 ...

  3. display:none,overflow:hidden,visibility:hidden之间的区别

    一,display:none; 隐藏元素,不占网页中的任何空间,让这个元素彻底消失(看不见也摸不着) 二,overflow:hidden; 让超出的元素隐藏,就是在设置该属性的时候他会根据你设置的宽高 ...

  4. javascript面向对象规则汇总以及json

    javascript中一切皆对象,而且定义非常灵活, 于是出现了一些相对其他编程语言环境下匪夷所思的代码: ---------------------------------------------- ...

  5. AWR分析。(shared_pool,sga_size大小设置)

    Execute to Parse 指标反映了执行解析比 其公式为 1-(parse/execute) , 目标为100% 及接近于只 执行而不解析 在oracle中解析往往是执行的先提工作,但是通过游 ...

  6. PHP快速排序及其时间复杂度

    <?php function quickSort(&$arr, $l, $r) { if (count($arr)<2 || $l>$r) return; $tmp_l = ...

  7. OCR文字识别软件许可文件被误删了怎么办

    使用任何一款软件,都会有误操作的情况发生,比如清理文件时一不小心删除了许可文件,对于ABBYY FineReader 12这样一款OCR文字识别软件,因失误错误删除了许可文件该怎么办呢?今天就来给大家 ...

  8. 005. asp.net页面常用指令

    页面指令 用于通知编译器在编译该页面时做出什么样的处理方式, 欢聚换来讲, 页面指令指定了执行该页面的运行时环境, 当编译器处理应用程序时, 可以通过这些指令来让编译器做特定的处理;  在asp.ne ...

  9. linux服务之openldap

    http://www.openldap.org/ http://blog.csdn.net/chinalinuxzend/article/details/1870656 OpenLDAP学习笔记 ht ...

  10. mysql 多行合并一列

    mysql  多行合并一列 使用的函数为: GROUP_CONCAT(exp) 其中exp 的参数类似如下: (field order  by field   desc  separator ';') ...