Динамически уменьшайте высоту диалога с WebView при изменении содержимого HTML, .... или исправляйте высоту - PullRequest
4 голосов
/ 25 июля 2011

У меня есть DialogFragment (отображается в виде диалога), макет которого содержит элемент управления WebView. Макет настроен на wrap_content. Я работаю над планшетом и хочу отображать его в виде диалога, но не хочу, чтобы высота соответствовала высоте экрана.

В веб-представлении отображается HTML-контент, определенный во время сборки.

HTML-код содержит ссылки, которые могут скрывать и отображать содержимое (скрытие / отображение «divs»).

Когда я нажимаю на ссылки, чтобы развернуть их, высота диалога увеличивается при отображении контента.

Однако при свертывании записей высота диалогового окна не уменьшается.

Я бы предпочел зафиксировать высоту диалогового окна после загрузки контента. В противном случае высота диалогового окна уменьшается, поскольку содержимое скрыто.

Заранее спасибо, Питер.

Ответы [ 4 ]

1 голос
/ 05 августа 2011

Несмотря на то, что код нуждается в очистке и могут быть более аккуратные способы сделать это, но я поместил следующее в событие onPageFinished для WebView, и оно выполняет мою работу по исправлению высоты диалогового окна после того, как html-контент былзагружен.

public void onPageFinished(WebView view, String url) {
    ....
    webView.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
        if (webView.getHeight() < currentHeight) {
          currentHeight = webView.getHeight();
        }
        final LayoutParams params = webView.getLayoutParams();
        params.height = currentHeight;
        webView.setLayoutParams(params);
        return false;
      }
    });
}
1 голос
/ 05 августа 2011

Простая попытка

Попытка invalidate(); в onClickListener

yourWebView.setOnTouchListener(new OnTouchListener() { 
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        // TRY to invalidate();

        // Try to setVisibility(View.GONE); then directly (View.VISIBLE)      
        return false;
    } 
});

СложнееМатериал

  • Навигация по исходному коду WebView
  • Следите за выполнением щелчков (я полагаю, вы должны начать с loadUrl())
  • Попытайтесь достичь точки, которая заставляет WebView увеличиваться в размерах при отображении div

Там вы можете найти способ имитировать это поведение, когда div пропал

0 голосов
/ 05 августа 2011

Я пришел из фона iOS. Вам нужно использовать что-то похожее на элемент управления popover в iPad.

В качестве альтернативы вы можете использовать LayoutInflator для настройки размера представления. Этот пост в блоге (ресурсы Layou в Android) , кажется, описывает, как именно это сделать. Похоже, у людей были хорошие результаты с этим.

0 голосов
/ 02 августа 2011

Хотя это может быть возможно, я считаю, что наличие диалогового окна, меняющего размер при взаимодействии пользователя с ним, не очень хороший пользовательский интерфейс (я не знаю ваше приложение, поэтому, возможно, я ошибаюсь).Возможно, вам следует рассмотреть обычную активность вместо отображения веб-просмотра в диалоговом окне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...