[JAVA] Ajustez automatiquement la hauteur de la boîte de dialogue WebView avec la taille du contenu

Chose que tu veux faire

・ Afficher le contenu sur le Web dans une boîte de dialogue -La largeur du dialogue correspond à 90% de la largeur de l'écran ・ La hauteur de la boîte de dialogue peut être modifiée en fonction de la taille du contenu

faire

  1. Largeur de dialogue fixe
  2. Calculez et modifiez la hauteur de la boîte de dialogue une fois le chargement de la WebView terminé

La source

WebViewDialogFragment.java



public class WebViewDialogFragment extends DialogFragment {

	//Omettre les choses non pertinentes

	@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){
				//Modifier la hauteur de la boîte de dialogue en fonction de la taille du contenu
				Dialog dialog = getDialog();
				WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();

				//conversion 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);

        //Seule la largeur est fixée au départ
        Dialog dialog = getDialog();
        WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();

        DisplayMetrics metrics = getResources().getDisplayMetrics();
		float scale = 0.9f;
        lp.width = (int)(metrics.widthPixels * scale);
		//Définissez la hauteur sur 0 et masquez la boîte de dialogue une fois
        lp.height = 0;

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

point

A propos du redimensionnement de la boîte de dialogue

ʻOnCreateDialog ʻonCreateView ne fonctionne pas même sidialog.getWindow (). SetAttributes (lp);. Doit être adressé en remplaçant ʻonActivityCreated`.

Référence: Notes diverses de Y.A.M: Android DialogFragment, spécifiez la taille de Dialog avec onActivityCreated

À propos de la hauteur du contenu

Vous pouvez obtenir la hauteur du contenu avec WebView.getContentHeight (), mais l'unité est dp. Multipliez par DisplayMetrics.scaledDensity pour convertir en px, puis définissez.

Recommended Posts

Ajustez automatiquement la hauteur de la boîte de dialogue WebView avec la taille du contenu
JavaFX --Match la taille d'ImageView avec d'autres nœuds
[Android] Définir dynamiquement la hauteur de ListView avec copie (pour les débutants)
Faites défiler automatiquement l'arrière-plan avec libGDX
[Android] Ajuster automatiquement textScaleX de TextView
Vérifiez le contenu des paramètres avec le levier
Mesurez facilement la taille des objets Java
À propos du traitement de BigDecimal (avec réflexion)
Mettre en forme le contenu de LocalDate avec DateTimeFormatter