Android實現真正的禁止WebView滾動

轉載地址 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,結果頭痛了幾天的問題解決了,在此記錄下來

[java] view plain copy
  1.     public class WebViewMod extends WebView {  
  2.     public EditText mFocusDistraction;  
  3.     public Context mContext;  
  4.     public WebViewMod(Context context) {  
  5.             super(context);  
  6.             init(context);  
  7.         }      
  8.   
  9.         public WebViewMod(Context context, AttributeSet attrs) {  
  10.             super(context, attrs);  
  11.             init(context);  
  12.         }      
  13.   
  14.         public WebViewMod(Context context, AttributeSet attrs, int defStyle) {  
  15.             super(context, attrs, defStyle);  
  16.             init(context);  
  17.         }  
  18.   
  19.         @SuppressLint("NewApi")   
  20.         public WebViewMod(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {  
  21.             super(context, attrs, defStyle, privateBrowsing);  
  22.             init(context);  
  23.         }  
  24.   
  25.         public void init(Context context) {  
  26.             // This lets the layout editor display the view.  
  27.             if (isInEditMode()) return;  
  28.   
  29.             mContext = context;  
  30.   
  31.             mFocusDistraction = new EditText(context);  
  32.             mFocusDistraction.setBackgroundResource(android.R.color.transparent);  
  33.             this.addView(mFocusDistraction);  
  34.             mFocusDistraction.getLayoutParams().width = 1;  
  35.             mFocusDistraction.getLayoutParams().height = 1;  
  36.         }  
  37.         protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  38.             invalidate();  
  39.                 super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
  40.         }  
  41.   
  42.         @Override  
  43.         public boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY,   
  44.                                     int scrollRangeX, int scrollRangeY, int maxOverScrollX,   
  45.                                     int maxOverScrollY, boolean isTouchEvent) {  
  46.             return false;  
  47.         }  
  48.         /** 
  49.          * 使WebView不可滾動 
  50.          * */  
  51.         @Override  
  52.         public void scrollTo(int x, int y){  
  53.             super.scrollTo(0,0);  
  54.         }  
  55.     }  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章