LoginSignup
1
0

More than 5 years have passed since last update.

WebViewダイアログの高さをコンテンツのサイズで自動調整する

Last updated at Posted at 2018-10-26

やりたいこと

・web上のコンテンツをダイアログで表示
・ダイアログ幅は画面幅の90%
・ダイアログ高さはコンテンツサイズで可変にする

やる

  1. ダイアログの幅を固定
  2. WebViewの読み込みが終わった時点でダイアログの高さを算出して変更

ソース

WebViewDialogFragment.java

public class WebViewDialogFragment extends DialogFragment {

    // 無関係なものは省略

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        binding = DialogWebViewBinding.inflate(inflater, container, false);

        String url = "https://hogehoge";

        binding.webview.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageFinished(WebView view , String url){
                // コンテンツサイズによりダイアログ高さ変更
                Dialog dialog = getDialog();
                WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();

                // dp→px変換
                DisplayMetrics metrics = getResources().getDisplayMetrics();
                lp.height = (int)(view.getContentHeight() * metrics.scaledDensity);

                dialog.getWindow().setAttributes(lp);
            }
        });
        binding.webview.loadUrl(url);

        return binding.getRoot();
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        // 開始時点では幅のみ固定する
        Dialog dialog = getDialog();
        WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();

        DisplayMetrics metrics = getResources().getDisplayMetrics();
        float scale = 0.9f;
        lp.width = (int)(metrics.widthPixels * scale);
        // 高さ0にしてダイアログを一旦非表示
        lp.height = 0;

        dialog.getWindow().setAttributes(lp);
    }
}

ポイント

ダイアログのサイズ変更について

onCreateDialog onCreateViewdialog.getWindow().setAttributes(lp); しても効かない。
onActivityCreated のオーバーライドで対応する必要がある。

参考:Y.A.M の 雑記帳: Android DialogFragment では Dialog のサイズ指定は onActivityCreated でやれ

コンテンツの高さについて

WebView.getContentHeight() でコンテンツの高さが取れるが、単位はdp。
DisplayMetrics.scaledDensityを乗じてpxに変換してから設定する。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0