[JAVA] Passen Sie die Höhe des WebView-Dialogfelds automatisch an die Größe des Inhalts an

Was du machen willst

・ Zeigen Sie Inhalte im Web in einem Dialogfeld an -Dialogbreite beträgt 90% der Bildschirmbreite ・ Die Dialoghöhe kann je nach Inhaltsgröße geändert werden

machen

  1. Feste Dialogbreite
  2. Berechnen und ändern Sie die Höhe des Dialogfelds, wenn das Laden von WebView abgeschlossen ist

Quelle

WebViewDialogFragment.java



public class WebViewDialogFragment extends DialogFragment {

	//Lass irrelevante Dinge weg

	@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){
				//Ändern Sie die Dialoghöhe abhängig von der Inhaltsgröße
				Dialog dialog = getDialog();
				WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();

				//dp → px Konvertierung
				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);

        //Nur die Breite ist am Anfang festgelegt
        Dialog dialog = getDialog();
        WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();

        DisplayMetrics metrics = getResources().getDisplayMetrics();
		float scale = 0.9f;
        lp.width = (int)(metrics.widthPixels * scale);
		//Setzen Sie die Höhe auf 0 und blenden Sie den Dialog einmal aus
        lp.height = 0;

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

Punkt

Informationen zur Größenänderung des Dialogfelds

onCreateDialog`` onCreateView funktioniert nicht mitdialog.getWindow (). SetAttributes (lp);. Es muss durch Überschreiben von "onActivityCreated" behoben werden.

Referenz: Verschiedene Anmerkungen von Y.A.M .: Android DialogFragment, geben Sie die Dialoggröße mit onActivityCreated an

Über die Höhe des Inhalts

Sie können die Höhe des Inhalts mit "WebView.getContentHeight ()" ermitteln, aber die Einheit ist dp. Multiplizieren Sie mit "DisplayMetrics.scaledDensity", um in px zu konvertieren, und setzen Sie dann.

Recommended Posts

Passen Sie die Höhe des WebView-Dialogfelds automatisch an die Größe des Inhalts an
JavaFX - Passen Sie die Größe von ImageView an andere Knoten an
[Android] Dynamisch die Höhe von ListView mit Kopie einstellen (für Anfänger)
Scrollen Sie automatisch mit libGDX durch den Hintergrund
[Android] Passen Sie textScaleX von TextView automatisch an
Überprüfen Sie den Inhalt der Parameter mit pry
Messen Sie einfach die Größe von Java-Objekten
Über die Behandlung von BigDecimal (mit Reflexion)
Formatieren Sie den Inhalt von LocalDate mit DateTimeFormatter