WebViewを内部に持つDialogFragmentがあります。Webビューがページを十分に速くロードしない場合、DialogFragmentは完全に縮小し、Webビューを表示しません。それ以外の場合、読み込みが速かった場合は、WebViewが表示されます。
4 に答える
私は自分で解決策を見つけました。DialogFragmentのルートビューとしてLinearLayoutを使用すると、これが発生し、FrameLayoutに変更すると問題が解決しました。理由はわかりませんが、機能します。
2つのデバイスで試しました。
最初のデバイスでは、Nexus6はDavidのように機能しました。「自分で解決策を見つけました。DialogFragmentのルートビューとしてLinearLayoutを使用すると、これが発生し、FrameLayoutに変更すると問題が解決しました。理由はわかりませんが、機能します。」 。しかし、私は2番目のデバイス(Galaxy Prime)で試しましたが、驚きましたが、機能しませんでした。コールバック内のWebViewClientでsetVisibleGONEWebViewを作成しようonPageStarted()
とした後、コールバック内でsetVisibleVISIBLEを作成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);
}
}
私の場合、ExpandableHeightWebView
動的な高さのようにカスタムWebViewを使用しました。
@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ビューをロードする場合、AsyncTasksはメインスレッドにあるレイアウトを変更できないため、ダイアログフラグメントは表示されません。それを見てください。