Android禁止WebView滚动的方法

来源:互联网 发布:deb文件安装到linux 编辑:程序博客网 时间:2024/05/29 16:01

     在选择Web的输入框弹出键盘,这时WebView的高度改变重新渲染,如果html调整层级的位置使内容除输入框外不变,先将层级上移再移回原来位置时就会出现闪屏。经测试,有些手机会出现闪屏,有些不会。想到了禁止WebView滚动应该可以解决问题。

     但是如何禁止WebView不可滚动呢?WebView有几个与滚动有关的方法,但是都无效。如:   

    WebView.setScrollContainer(false);
    WebView.setVerticalScrollBarEnabled(false);
    WebView.setHorizontalScrollBarEnabled(false);

   后来看到WebView有个scrollTo(int x, int y)方法,于是重写该方法使其x,y都为0,结果头痛了几天的问题解决了,在此记录下来

    public class WebViewMod extends WebView {    public EditText mFocusDistraction;    public Context mContext;    public WebViewMod(Context context) {            super(context);            init(context);        }            public WebViewMod(Context context, AttributeSet attrs) {            super(context, attrs);            init(context);        }            public WebViewMod(Context context, AttributeSet attrs, int defStyle) {            super(context, attrs, defStyle);            init(context);        }        @SuppressLint("NewApi")         public WebViewMod(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {            super(context, attrs, defStyle, privateBrowsing);            init(context);        }        public void init(Context context) {            // This lets the layout editor display the view.            if (isInEditMode()) return;            mContext = context;            mFocusDistraction = new EditText(context);            mFocusDistraction.setBackgroundResource(android.R.color.transparent);            this.addView(mFocusDistraction);            mFocusDistraction.getLayoutParams().width = 1;            mFocusDistraction.getLayoutParams().height = 1;        }        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {            invalidate();                super.onMeasure(widthMeasureSpec, heightMeasureSpec);        }        @Override        public boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY,                                     int scrollRangeX, int scrollRangeY, int maxOverScrollX,                                     int maxOverScrollY, boolean isTouchEvent) {            return false;        }        /**         * 使WebView不可滚动         * */        @Override        public void scrollTo(int x, int y){            super.scrollTo(0,0);        }    }


0 0
原创粉丝点击