2012-01-25 47 views
0

我想要做的是更改webview的字体大小和前景/背景颜色。滚动后WebView属性不会改变

private void updateFont(int fontSize, String fontColor) { 
    if (fontSize != 0) { 
    contentWebview.getSettings().setDefaultFontSize(fontSize); 
    } 
    if (!fontColor.equals("")) { 
    contentWebview.loadUrl(fontColor); 
    } 
} 

现在,这是工作的罚款: 我一直在使用下面的方法(放置在活动中)做到了这一点。不过,我打听到我的contentWebview(这是我创建一个自定义的WebView) - 以下是自定义的WebView的一些片段:

public class ContentWebview extends WebView { 

    public ContentWebview(Context context) { 
    super(context); 
    } 

    public ContentWebview(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    loadWebview(); 

    gestureDetector = new GestureDetector(new MyGestureDetector()); 
    gestureListener = new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
     return gestureDetector.onTouchEvent(event); 
     } 
    }; 
    setOnTouchListener(gestureListener); 
    } 

    class MyGestureDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     try { 
     if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {     
      return false; 
     } 
     // right to left swipe 
     if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      int currentPosition = getScrollX()/displayWidth +1; 
      scrollTo(currentPosition*displayWidth, 0); 
     } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      int currentPosition = getScrollX()/displayWidth; 
      scrollTo(currentPosition*displayWidth, 0); 
     } 
     } catch (Exception e) { 
     // nothing 
     } 
     return true; 
    } 
    } 

    public boolean onTouchEvent(MotionEvent ev) { 
    if(ev.getAction()==MotionEvent.ACTION_UP) { 
     int currentPosition = getScrollX()/displayWidth; 
     if(getScrollX()%displayWidth>displayWidth/2) { 
     currentPosition++; 
     } else { 
     // do nothing 
     }  
     scrollTo(currentPosition*displayWidth, 0); 
    } 
    return super.onTouchEvent(ev); 
    } 

基本上,我已经创建了一个捕捉到一个固定的计算的位置自定义的WebView时被滚动或被折叠。现在,这是问题出现的地方 - 一旦我滚动这个特定的webview,先前的方法(updateFont)不再工作 - webview不会更改字体大小或颜色。

我也缩小了问题这一行:

setOnTouchListener(gestureListener); 

如果我注释掉这一行,该updateFont方法再次工作即使我滚动web视图,但在锁定到页面上我的webview的投掷功能也消失了。

我在这里错过了什么?

更新:问题只发生在froyo设备上。 2.3及以上似乎并不有问题

回答

0

经过一些修改后的项目,我发现加载到自定义webview中的属性更改会在一段时间后解释。延迟是由一个onNewPictureListener触发对JavaScript命令的无限调用引起的,该命令在执行其他内容之前先由webview解释。删除这个问题解决了这个问题。

0

有与web视图和GestureDetectors的几个问题 - 在你onFling(..)方法尝试总是返回,而不是真正 - 使用姿态探测器在时尚你所做的就是阻止非常基本的东西(比如甚至更新当前显示的页面)。

相关问题