Android禁止WebView滚动的方法

     在选择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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值