900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > android 禁止view滚动条 Android:禁止滚动的解决方法

android 禁止view滚动条 Android:禁止滚动的解决方法

时间:2021-06-11 20:26:07

相关推荐

android 禁止view滚动条 Android:禁止滚动的解决方法

这是纠结了我很久的一个问题,当我们在一个View里又嵌套一个View,但是两个View的内容超出范围后都会滚动的情况下,怎么保证内层的View固定不滚动。

一个Activity中有多个GridView,我给这几个GridView固定高度,但是不想让这几个小的GridView滚动。

类似于以上形式

但是不管是百度还是谷歌,我都没找到GridView有一种方法或者一个属性,直接设置滚动状态,只有一个可以设置滚动条是否可见,即使不可见,也是可以滚动的。于是想替代办法。后来查找英文资料的时候,发现一个很多View都有的方法:onTouchEvent()方法,这个方法可以判断你是点击,还是滑动,还是离开。于是想自己重写这个方法,但是不知道怎么重写GridView的方法,干脆直接新建一个类myGridView,继承GridView,重写这个方法。当点击或者离开时,myGridView调用父类的方法,当滑动时,什么都不干。思路就是这样。

新建myGridView类,重写onTouchEvent方法:

public class myGridView extends GridView {

public myGridView(Context context) {

super(context);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

//重写的onTouchEvent回调方法

switch(event.getAction()){

//按下

case MotionEvent.ACTION_DOWN:

System.out.println(“ACTION_DOWN”);

return super.onTouchEvent(event);

//滑动

case MotionEvent.ACTION_MOVE:

System.out.println(“ACTION_MOVE”);

break;

//离开

case MotionEvent.ACTION_UP:

System.out.println(“ACTION_UP”);

return super.onTouchEvent(event);

}

//注意:返回值是false

return false;

}

}

我相信大家一看就会明白的,但是要注意返回值要是false因为只有滑动动作的时候才break出来,然后返回,其他两种操作交给父类来进行正常的处理。这样,直接返回,什么都不会去做,当然也不会滚动了。(估计返回true也可)。

问题还没有解决,布局文件里面不能识别myGridView,所以动态添加myGridView,在这里我是加了一个LinearLayout,得到她的ID,在程序中建立myGridView对象,用LinearLayout的addView方法加进去。OK!

添加GridView

LinearLayout ly1 = (LinearLayout)findViewById(R.id.ly1);

LinearLayout ly2 = (LinearLayout)findViewById(R.id.ly2);

LinearLayout ly3 = (LinearLayout)findViewById(R.id.ly3);

LinearLayout ly4 = (LinearLayout)findViewById(R.id.ly4);

mGrid = new myGridView(this);

mGrid2 = new myGridView(this);

mGrid3 = new myGridView(this);

mGrid4 = new myGridView(this);

//Adapter自己去写

mGrid.setAdapter(adapter);

mGrid2.setAdapter(adapter2);

mGrid3.setAdapter(adapter3);

mGrid4.setAdapter(adapter4);

//设置一些myGridView的属性

mGrid.setColumnWidth(60);

mGrid.setHorizontalSpacing(5);

mGrid.setVerticalScrollBarEnabled(false);

mGrid.setNumColumns(GridView.AUTO_FIT);

//注意第二个参数

ly1.addView(mGrid,

new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

ly2.addView(mGrid2,

new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

ly3.addView(mGrid3,

new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

ly4.addView(mGrid4,

new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

中间肯定有一些需要自己写的东西,我只是把关键代码贴出来了。搞定,很高兴!!!

作者:刘钊

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。