9

我有一个 DialogFragment,里面有一个 WebView。如果 webview 加载页面的速度不够快,DialogFragment 将完全收缩并且不显示 webview。否则,如果加载速度很快,则会显示 WebView。

4

4 回答 4

10

我自己找到了解决方案。如果您使用 LinearLayout 作为 DialogFragment 的根视图,则会发生这种情况,将其更改为 FrameLayout 可以解决问题。我不明白为什么,但它有效。

于 2013-09-03T15:19:34.547 回答
3

我尝试了两个设备。

在第一个设备中,Nexus 6 的工作方式就像 David “我自己找到了解决方案。如果您使用 LinearLayout 作为 DialogFragment 的根视图,则会发生这种情况,将其更改为 FrameLayout 解决了问题。我不明白为什么,但它可以工作” . 但是我尝试了第二台设备(Galaxy Prime),但很惊讶,没有成功。尝试在我的 WebViewClient 内部回调中设置 setVisible GONE WebViewonPageStarted()并在 setVisible VISIBLE 内部回调之后onPageFinished()为我工作。

public class MyWebClient extends WebViewClient { 

    private static final String LOG_CAT = "NetPayWebClient";

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        Log.e(LOG_CAT, "onPageStarted(): " + url);
        view.setVisibility(View.GONE);
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        Log.e(LOG_CAT, "onPageFinished(): " + url);
        view.setVisibility(View.VISIBLE);
        super.onPageFinished(view, url);
    }

}

于 2017-04-01T20:36:07.980 回答
1

就我而言,我使用了自定义 WebView,例如ExpandableHeightWebView动态高度。

@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
    if (isExpanded())
    {

        int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);

        ViewGroup.LayoutParams params = getLayoutParams();
        params.height = getMeasuredHeight();
    }
    else
    {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

我在删除行后 解决了这个问题setExpanded(true);后打电话。myWebView.loadData(data,null);
setExpanded(true);

于 2014-01-29T12:17:19.233 回答
-1

如果您可以通过 AsyncTaks 加载 Web 视图,则不会显示 Dialog 片段,因为 AsyncTasks 无法更改主线程中的布局。看看它。

于 2013-09-03T14:31:23.690 回答