1. 程式人生 > >Android禁止WebView滾動的方法

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);
        }
    }