diminuer la hauteur de Dynamiquement dialogue avec WebView que les changements de contenu HTML, ... ou hauteur fixe

StackOverflow https://stackoverflow.com/questions/6816444

  •  25-10-2019
  •  | 
  •  

Question

J'ai un DialogFragment (affiché comme une boîte de dialogue) dont la mise en page contient un contrôle WebView. La mise en page est configuré pour wrap_content. Je travaille sur une tablette et ne souhaitez afficher comme une boîte de dialogue, mais ne veulent pas avoir le match de hauteur de l'écran.

La vue web affiche le contenu HTML qui est défini au moment de la construction.

Le code HTML contient des liens qui peuvent se cacher et montrer le contenu (cacher / montrer 'divs').

Comme je clique sur les liens pour les développer ensuite la hauteur de la boîte de dialogue augmente comme le montre le contenu.

Cependant, quand je Réduire les entrées de la hauteur de la boîte de dialogue ne contrat.

Ma préférence serait de fixer la hauteur de la boîte de dialogue après que le contenu a été chargé. A défaut d'avoir la hauteur de la diminution de dialogue que se cache le contenu.

Merci à l'avance, Peter.

Était-ce utile?

La solution 2

Bien que les besoins de code de nettoyage et il peut y avoir plus propre façons de le faire, mais je mets ce qui suit dans l'événement onPageFinished pour la WebView et il fait le travail pour moi de fixer la hauteur de dialogue après le contenu HTML a été chargé.

public void onPageFinished(WebView view, String url) {
    ....
    webView.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
        if (webView.getHeight() < currentHeight) {
          currentHeight = webView.getHeight();
        }
        final LayoutParams params = webView.getLayoutParams();
        params.height = currentHeight;
        webView.setLayoutParams(params);
        return false;
      }
    });
}

Autres conseils

Essayez simple

Essayez de invalidate(); dans le onClickListener

yourWebView.setOnTouchListener(new OnTouchListener() { 
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        // TRY to invalidate();

        // Try to setVisibility(View.GONE); then directly (View.VISIBLE)      
        return false;
    } 
});

Harder Stuff

  • Naviguer dans le code source du WebView
  • Suivez l'exécution des clics (I beleive vous devriez commencer à partir loadUrl())
  • Essayez d'atteindre au point qui est à l'origine du WebView pour devenir plus grand quand un div est affichée

, vous pourriez trouver un moyen d'imiter ce comportement lorsque le div est parti

Bien que cela puisse être possible, je crois avoir une boîte de dialogue qui change de taille que l'utilisateur interagit avec elle n'est pas une interface très bon utilisateur (je ne sais pas votre demande alors peut-être que je pourrais être mal juger). Peut-être que vous devriez envisager une activité régulière au lieu d'afficher votre Webview dans une boîte de dialogue.

Je viens d'un milieu iOS. Vous devez utiliser quelque chose de similaire à un contrôle popover en iPad.

vous pouvez également utiliser LayoutInflator pour ajuster la taille de la vue. Ce billet de blog (ressources Layou dans Android) semble pour décrire exactement comment faire cela. On dirait que les gens ont eu de bons résultats avec cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top