2012-01-25 10 views
0

私がしようとしているのは、Webビューのフォントサイズとフォアグラウンド/バックグラウンドカラーを変更することです。 私は(アクティビティの内側に配置)は、以下の方法を使用してこれを行っていますスクロール後にWebViewプロパティが変更されない

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

は今、これが正常に動作しています。しかし、私は(私が作成したカスタムのWebViewである)私のcontentWebviewに何かを追加 - 以下のカスタムの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方法は、私はWebViewのをスクロールした後も再び動作しますが、スナップに、ページ上の私のwebviewのfling機能もなくなりました。

私はここで何が欠けていますか?

更新:問題はfroyoデバイスでのみ発生します。ファッションジェスチャ検出器を使用して代わりに - のごonFling(..)方法でを返す常にをを試す - 2.3以上はWebViewのとGestureDetectorsといくつかの問題があります問題

答えて

0

このプロジェクトでは、カスタムWebviewに読み込まれたプロパティの変更が、しばらくしてから解釈されていることがわかりました。この遅延は、onNewPictureListenerがjavascriptコマンドを無期限に呼び出すことによって引き起こされます。これは、他のものを実行する前にwebviewによって最初に解釈されます。これを削除すると問題が解決しました。

0

を持っていないようですあなたはかなり基本的なもの(現在表示されているページを更新するなど)をブロックすることが知られています。

関連する問題