前些日子在开发中用到了需要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. VS2013远程调试功能

    我跪了,我真的跪了. 实际证明这是不可行的. [开发机] Win10,64bits,VS2013 [目标机] Winxp VS2013的debug tool不能在xp上安装运行,卒! 如果有win7, ...

  2. Cycles_per_instruction

    https://en.wikipedia.org/wiki/Cycles_per_instruction

  3. 对OCR文字识别软件的扫描选项怎么设置

    说到OCR文字识别软件,越来越多的人选择使用ABBYY FineReader识别和转换文档,然而并不是每个人都知道转换质量取决于源图像的质量和所选的扫描选项,今天就给大家普及一下这方面的知识. ABB ...

  4. jQuery.fn.extend与jQuery.extend

    jQuery.extend(),是扩展的jQuery这个类. 假设我们把jQuery这个类看成是人类,能吃饭能喝水能跑能跳,现在我们用jQuery.extend这个方法给这个类拓展一个能唱歌的技能.这 ...

  5. EntityValidationErrors

    关于如何查看 EntityValidationErrors 详细信息的解决方法 我们在 EF 的编程中,有时候会遇到这样一个错误: 但是,按照他的提示 "See 'EntityValidat ...

  6. Linux 下SVN自动更新

    1.找到svn的所在目录: 我的目录在/usr/local/svn/myproject 2.新建post-commit vim hooks/post-commit #!/bin/shexport LA ...

  7. XMLHttpRequest 对象

    XMLHttpRequest 对象 XML XSLTXML 解析器XMLHttpRequest 对象用于在后台与服务器交换数据. 什么是 XMLHttpRequest 对象? XMLHttpReque ...

  8. css_样式样式器的分类

    详情:http://www.w3school.com.cn/h.asp 1.标签样式器:此样式器仅对html页面中div标签有效果 div{ background-color: rosybrown; ...

  9. 如何利用RMAN Debug和10046 Trace来诊断RMAN问题?

    学习转摘:https://blogs.oracle.com/Database4CN/entry/%E5%A6%82%E4%BD%95%E5%88%A9%E7%94%A8rman_debug%E5%92 ...

  10. mybatis——动态sql

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. MyBatis中用于实现动态SQL的元素主要有: if choose(when,otherwise) ...