• 如何禁止scrollView 的子控件自动滑到 底部或者中间部分


    现象:当一个scrollView 里面包含很多childView,并且整个界面超出屏幕的范围,而且每个childView都获取焦点,scrollView就会自动滑到底部或者中间部分。

     可以使用以下几种方法解决:

     1:有点绕,基本思路,就是让scrollView优先于childView获取到焦点,
    private void disableAutoScrollToBottom() {
            mScrollView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
            mScrollView.setFocusable(true);
            mScrollView.setFocusableInTouchMode(true);
            mScrollView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    v.requestFocusFromTouch();
                    return false;
                }
            });
        }
     恢复默认状态,禁掉scrollview的focus,这样就允许childview自动滑动
        private void enableChildAutoScrollToBottom() {
            mScrollView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
            mScrollView.setFocusable(false);
            mScrollView.setFocusableInTouchMode(false);
            mScrollView.setOnTouchListener(null);
        }
    方法二:
    将可能自动滑动的childview的focus禁掉,防止它自动滑动
                mContentTextBox.setFocusable(false);
    恢复默认状态,允许childview的focus,使它可以自动滑动
                    mContentTextBox.setFocusableInTouchMode(true);
                    mContentTextBox.setFocusable(true);
    这里要注意,仅仅setFocusable为true是不够的,需要设setFocusableInTouchMode。
    方法三:重写ScrollView的方法
      @Override
        protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
    
            return 0;
        }
    或者
    @Override
        protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {
            return true;
        }
     
  • 相关阅读:
    在Asp.Net中使用jQueryEasyUI(转)
    easyui简单使用
    0mq 入门 (转)
    windows钩子(转)
    Windbg简明教程(转)
    复合文档学习笔记 (转)
    解析eml文件
    强制windows系统重启at命令
    pygame 入门实例
    python 回溯法 子集树模板 系列 —— 18、马踏棋盘
  • 原文地址:https://www.cnblogs.com/ai394495243/p/4844266.html
Copyright © 2020-2023  润新知