我有一个 DialogFragment,里面有一个 WebView。如果 webview 加载页面的速度不够快,DialogFragment 将完全收缩并且不显示 webview。否则,如果加载速度很快,则会显示 WebView。
4 回答
我自己找到了解决方案。如果您使用 LinearLayout 作为 DialogFragment 的根视图,则会发生这种情况,将其更改为 FrameLayout 可以解决问题。我不明白为什么,但它有效。
我尝试了两个设备。
在第一个设备中,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);
}
}
就我而言,我使用了自定义 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);
如果您可以通过 AsyncTaks 加载 Web 视图,则不会显示 Dialog 片段,因为 AsyncTasks 无法更改主线程中的布局。看看它。