Свойства WebView не меняются после прокрутки - PullRequest
0 голосов
/ 26 января 2012

Я пытаюсь изменить размер шрифта и цвет переднего плана / фона веб-просмотра.Я сделал это, используя следующий метод (помещенный в упражнение):

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

Теперь все работает нормально.Однако я добавил кое-что в свое contentWebview (которое я создал в виде пользовательского веб-сайта) - ниже приведен фрагмент пользовательского веб-просмотра:

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, который привязывается к фиксированной расчетной позиции.когда прокручивается или швыряется.Теперь здесь возникает проблема - когда я прокручивал это конкретное веб-представление, предыдущий метод (updateFont) больше не работает - веб-представление не меняет размер или цвет шрифта.

Я также сузилпроблема с этой конкретной строкой:

setOnTouchListener(gestureListener);

Если я закомментирую эту строку, метод updateFont снова будет работать даже после прокрутки веб-просмотра, но функция привязки к странице при переключении функций моего веб-просмотратакже пропал.

Что мне здесь не хватает?

Обновление: проблема возникает только в устройствах froyo.2.3 и выше, похоже, не проблема

Ответы [ 2 ]

0 голосов
/ 30 января 2012

после некоторой работы с проектом я обнаружил, что изменения свойств, загруженные в пользовательское веб-представление, интерпретируются через некоторое время.Задержка вызвана тем, что onNewPictureListener запускает бесконечный вызов команды javascript, которая сначала интерпретируется веб-представлением перед выполнением других действий.Устранение этой проблемы решило проблему.

0 голосов
/ 26 января 2012

Есть несколько проблем с WebView и GestureDetectors - попробуйте всегда , возвращая false в вашем методе onFling(..) вместо true - используя детектор жестов в Известно, что ваши действия блокируют довольно простые вещи (например, даже обновление отображаемой в данный момент страницы).

...