android dialogFragment“有时”没有显示webview

时间:2012-11-07 17:29:59

标签: android android-webview android-dialogfragment

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

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分: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);行时,此问题已解决。

答案 2 :(得分:1)

我试过两台设备。

在第一台设备中,Nexus 6像大卫一样工作,我自己找到了解决方案。如果您使用LinearLayout作为DialogFragment的根视图,则会发生这种情况,将其更改为FrameLayout可以解决问题。我不明白为什么,但它有效"。但我尝试在第二个设备(Galaxy Prime)和惊喜,没有工作。尝试在回调onPageStarted()内部的WebViewClient中创建setVisible GONE WebView,然后在回调onPageFinished()内设置setVisible VISIBLE并为我工作。



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);
    }

}




答案 3 :(得分:0)

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