【问题标题】:Dynamically decrease the height of dialog with WebView as HTML content changes, .... or fix height随着 HTML 内容的变化,使用 WebView 动态降低对话框的高度,....或固定高度
【发布时间】:2011-07-25 12:55:03
【问题描述】:

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

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

HTML 包含可以隐藏和显示内容的链接(隐藏/显示“div”)。

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

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

我的偏好是在内容加载后修复对话框的高度。未能使对话框的高度随着内容被隐藏而减小。

提前致谢,彼得。

【问题讨论】:

    标签: android android-fragments


    【解决方案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 消失时模仿这种行为

    【讨论】:

    • 感谢您的回复。虽然这并没有解决我的问题,但我认为它有可能对我进行更多的思考,可能会使正确的事情无效(我在 LinearLayout 中有一个 FrameLayout)或者你建议深入挖掘。它确实让我想到了我可以在触摸事件上做的事情,并通过将 WebView 高度设置为它曾经的最小值来设法修复对话框的高度。这似乎对我有用并修复了对话框的高度(可能还有其他方法,但我会发布我的解决方案作为答案)。
    【解决方案2】:

    虽然代码需要清理,并且可能有更简洁的方法,但我将以下内容放在 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;
          }
        });
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 谢谢。不幸的是,我受到客户要求和平板电脑上应用程序性质的限制,无法将其显示为对话框。
      【解决方案4】:

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

      您也可以使用 LayoutInflator 来调整视图的大小。 This blog post (Layou resources in Android) 似乎准确地描述了如何做到这一点。看起来人们在这方面取得了很好的效果。

      【讨论】:

      • 感谢您的回复。我正在使用 DialogFragment 并将 onCreateView 中的视图膨胀。在我的布局中,我设置了wrap_content,因此要么寻找一种方法,然后在网页完成加载后修复视图(我的偏好),要么确定网页中的下拉菜单何时折叠,然后调整对话框的大小,代码示例会很有用。
      猜你喜欢
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多