我有一个带有WebView的DialogFragment。如果webview没有足够快地加载页面,DialogFragment将完全收缩而不显示webview。否则,如果加载速度很快,则会显示WebView。
答案 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无法更改主线程中的布局。 看看吧。