随着HTML内容的变化,动态降低WebView对话的高度,....或修复高度

时间:2011-07-25 12:55:03

标签: android android-fragments

我有一个DialogFragment(显示为对话框),其布局包含一个WebView控件。 布局设置为wrap_content。我正在使用平板电脑,并希望显示为对话框,但不希望高度与屏幕的高度相匹配。

Web视图显示在构建时定义的HTML内容。

HTML包含可以隐藏和显示内容的链接(隐藏/显示'divs')。

当我点击链接展开它们时,对话框的高度随着内容的显示而增加。

但是,当我折叠条目时,对话框的高度不会收缩。

我的偏好是在加载内容后修复对话框的高度。如果内容被隐藏,则无法使对话框的高度降低。

先谢谢,彼得。

4 个答案:

答案 0 :(得分:1)

简单尝试

尝试onClickListener

中的invalidate();
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()开始)
  • 尝试触及在显示div时导致WebView变大的点

在那里,当div消失时,你可能会找到一种模仿这种行为的方法

答案 1 :(得分:1)

尽管代码需要清理并且可能有更简洁的方法,但是我在WebView的onPageFinished事件中添加了以下内容,它确实帮我修复了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;
      }
    });
}

答案 2 :(得分:0)

虽然这可能是可能的,但我相信当用户与之交互时,有一个更改大小的对话框不是一个非常好的用户界面(我不知道你的应用程序,所以也许我可能会误判)。也许你应该考虑一个常规的Activity而不是在对话框中显示你的Webview。

答案 3 :(得分:0)

我来自iOS背景。你需要在iPad中使用类似于弹出控件的东西。

或者,您可以使用LayoutInflator调整视图的大小。 This blog post (Layou resources in Android)似乎准确地描述了如何做到这一点。看起来人们已经取得了不错的成绩。