9

WebViewを内部に持つDialogFragmentがあります。Webビューがページを十分に速くロードしない場合、DialogFragmentは完全に縮小し、Webビューを表示しません。それ以外の場合、読み込みが速かった場合は、WebViewが表示されます。

4

4 に答える 4

10

私は自分で解決策を見つけました。DialogFragmentのルートビューとしてLinearLayoutを使用すると、これが発生し、FrameLayoutに変更すると問題が解決しました。理由はわかりませんが、機能します。

于 2013-09-03T15:19:34.547 に答える
3

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

}

于 2017-04-01T20:36:07.980 に答える
1

私の場合、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);

于 2014-01-29T12:17:19.233 に答える
-1

AsyncTaksを介してWebビューをロードする場合、AsyncTasksはメインスレッドにあるレイアウトを変更できないため、ダイアログフラグメントは表示されません。それを見てください。

于 2013-09-03T14:31:23.690 に答える