Dinamicamente diminuire l'altezza della finestra di dialogo con WebView, come i cambiamenti di contenuto HTML, ... o altezza fissa

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

  •  25-10-2019
  •  | 
  •  

Domanda

Ho un DialogFragment (visualizzato come una finestra), il cui layout contiene un controllo WebView. Il layout è impostato per wrap_content. Sto lavorando su una tavoletta e si vuole visualizzare come un dialogo, ma non voglio avere il fiammifero di altezza di quella dello schermo.

Il web vista visualizza contenuto HTML che viene definita in fase di compilazione.

Il codice HTML contiene i collegamenti che possono nascondere e contenuti spettacolo (nascondere / mostrare 'div').

Come faccio clic sui collegamenti per espanderle poi l'altezza degli aumenti di dialogo, come il contenuto viene visualizzato.

Tuttavia, quando ho crollo voci l'altezza della finestra di dialogo non si contrae.

La mia preferenza sarebbe quella di fissare l'altezza della finestra di dialogo dopo che il contenuto è stato caricato. In mancanza di questo per avere l'altezza della finestra di diminuire il contenuto è nascosto.

Grazie in anticipo, Peter.

È stato utile?

Soluzione 2

Anche se le esigenze di codice pulendo e ci possono essere più ordinato modi di farlo, ma ho messo il seguente nell'evento onPageFinished per la WebView e lo fa il lavoro per me di fissare l'altezza finestra dopo che il contenuto HTML è stato caricato.

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

Altri suggerimenti

Prova semplice

Prova a invalidate(); nel 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

  • Naviga attraverso il codice sorgente del WebView
  • Seguire l'esecuzione degli scatti (I beleive si dovrebbe iniziare da loadUrl())
  • Prova a raggiungere il punto che sta causando il WebView per diventare più grandi quando viene mostrato un div

, si potrebbe trovare un modo per imitare questo comportamento quando il div è andato

Anche se questo potrebbe essere possibile, credo avere una finestra di dialogo che cambia dimensione come l'utente interagisce con esso non è una buona interfaccia utente (non so l'applicazione in modo forse potrei essere giudicato male). Forse si dovrebbe prendere in considerazione una regolare attività invece di visualizzare il tuo Webview in una finestra di dialogo.

Io vengo da un background iOS. È necessario utilizzare qualcosa di simile a un controllo popover in iPad.

In alternativa è possibile utilizzare LayoutInflator per regolare la dimensione della vista. Questo post del blog (risorse Layou in Android) sembra per descrivere esattamente come fare questo. Looks come persone hanno avuto buoni risultati con questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top