scrollview里面嵌套gridview问题

本文介绍了一种解决ScrollView中包含GridView时,使用按键导航导致焦点移出屏幕但页面不滚动的问题。通过手动控制ScrollView滚动位置,确保焦点始终保持在可见区域内。

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

有个项目 要求scrollview里包含一些imgview textview还有gridview,触摸屏滑动没遇到什么问题。

但是按键操作,焦点已经移出屏幕外了页面却没有跟着滚动。可能是scrollview和gridview都有滚动 互相有冲突了,看了许久也没看出什么道道。

那么我就用最原始的方法来解决了,页面滚动可以自己控制scrollview滚动。

1.获取数据

                WindowManager wm = this.getWindowManager();
                screenWidth = wm.getDefaultDisplay().getWidth();//获取屏幕宽度

                int[] location =new int[2];
                arg1.getLocationOnScreen(location);
                int x = location[0];//获取当前item在屏幕中的x坐标,因为我做的是横向滚动。

                viewWidth = arg1.getMeasuredWidth();//获取item的宽度

                int n = scrollView.getScrollX();//获取当前scroll在页面中的x坐标

2.计算

具体的我就不多说了,有了上面的那么数据加加减减就可以实现了.下面贴上相关代码。

gview.setOnItemSelectedListener(new OnItemSelectedListener() {

         public void onItemSelected(AdapterView<?> arg0, View arg1,
              int arg2, long arg3) {

              public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                Ipostion = arg2;
                Iview = arg1;
                
                int[] location =new int[2];
                arg1.getLocationOnScreen(location);
                viewWidth = arg1.getMeasuredWidth();
                int x = location[0];
                
                if (gview.KeyRight) {
                    if((x+viewWidth)>screenWidth){
                        scrollD = (x+viewWidth)-screenWidth;
                        mhandler.post(mScrollRunnable);
                    }
                }else if (gview.KeyLeft) {
                    if(x<=0){
                        if (arg2==0)
                            scrollD = -(viewWidth+gridviewSpacing);
                        else
                            scrollD = x;
                        mhandler.post(mScrollRunnable);
                    }
                }
                Log.d(TAG,"ddddddddddddd"+scrollD);
                
            }

             }


Handler mhandler = new Handler();
    private Runnable mScrollRunnable = new Runnable() {  
        
        public void run() {
            Log.d(TAG,"scroll......scroll");
            int n = scrollView.getScrollX();
            scrollView.scrollTo(n+scrollD, 0);

        }  
     
      }; 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值