转载地址 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);
- }
- }