【发布时间】:2012-01-30 12:19:44
【问题描述】:
我要做的是更改 webview 的字体大小和前景色/背景色。 我使用以下方法(放置在活动内)完成了此操作:
private void updateFont(int fontSize, String fontColor) {
if (fontSize != 0) {
contentWebview.getSettings().setDefaultFontSize(fontSize);
}
if (!fontColor.equals("")) {
contentWebview.loadUrl(fontColor);
}
}
现在一切正常。但是我在我的 contentWebview 中添加了一些东西(这是我创建的自定义 webview) - 下面是自定义 webview 的一些 sn-p:
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 方法即使在我滚动 webview 后仍然有效,但我的 webview 的快速跳转页面功能也消失了。
我在这里错过了什么?
更新:问题仅出现在 froyo 设备中。 2.3及以上似乎没有问题
【问题讨论】:
标签: android webview horizontal-scrolling