ScrollView嵌套GridView和ListView的问题

本文介绍了解决ScrollView嵌套GridView时出现的滑动冲突问题的方法。通过重写GridView的onMeasure方法,可以有效避免滑动冲突,并介绍了如何确保GridView正确显示的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

今天遇到了这样的界面 一看就是用ScrollView嵌套GridView最好处理了,也可以用ScrollView那样就麻烦了,我知道ScrollView嵌套GridView或ListView会有问题

所以从网上差了一下资料,其实很简单就是重新GridView或ListView的onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法 附上代码:

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

这样就可以解决滑动冲突的问题了,因为重写的这个方法就是把GridView的滑动去掉了。但是你会发现这个问题解决了下一个问题就来了,他会默认GridView显示在最上面,

需要在Activity的 onWindowFocusChanged(boolean hasFocus) 添加 scrollview.scrollTo(0, 0); 至于为什么不添加到onCreate和onStart中你就需要自己去了解一下

Activity的每个生命周期方法了。

1 public void onWindowFocusChanged(boolean hasFocus)
2     {
3         scrollview.scrollTo(0, 0);
4         super.onWindowFocusChanged(hasFocus);
5     }

 从网上搜上的解决方案:

1 scrollView.post(new Runnable()
2         {
3             @Override
4             public void run()
5             {
6                 scrollView.fullScroll(ScrollView.FOCUS_UP);
7             }
8         });

 

转载于:https://www.cnblogs.com/androidxiaoyang/archive/2013/01/11/2856551.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值