轉載地址 http://blog.csdn.net/bdemq/article/details/46775771
這個博客的這個寫的不錯,借鑑下。
在選擇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);
- }
- }