Android禁止WebView滾動的方法
阿新 • • 發佈:2019-01-07
在選擇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); } }