2011-08-31 3 views
5

In un'attività con molti componenti, ho un RelativeLayout che ha una visualizzazione Web (mostra un testo semplice, che non conosco le sue dimensioni).Regolazione delle dimensioni dinamiche del layout in Android

Questo è il codice xml:

<RelativeLayout android:id="@+id/descripcionRelative" android:layout_below="@+id/descripcion_bold" android:layout_width="match_parent" android:layout_height="125dip" android:background="@drawable/my_border"> 
    <WebView android:id="@+id/webViewDescripcion" android:layout_width="wrap_content" android:layout_height="wrap_content"/>  
</RelativeLayout> 

L'attributo android: layout_height di RelativeLayout è 125dip, perché se il testo è troppo grande, voglio delimitare a 125dip. Se il testo è grande, vedrò il testo con scroll. Grande!

Ma ... se il testo è breve, vedo molto spazio necessario.

Una soluzione è Android: layout_height di RelativeLayout per wrap_content. Se il testo è breve, il componente avrà i pixel esatti, ma se il testo è troppo grande, non posso delimitarlo.

Il GRANDE PROBLEMA è che non riesco a calcolare l'altezza del WebView. Se faccio: descripcion_web.getHeight() che restituisca 0.

Se chiamo questo metodo qui, non restituisce il numero di ben:

descripcion_web.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onPageFinished(WebView webView, String url) { 
      super.onPageFinished(webView, url); 
      RelativeLayout marco = (RelativeLayout)findViewById(R.id.descripcionRelative); 
      System.out.println("Height webView: "+webView.getHeight()); 
      System.out.println("Height relative: "+marco.getHeight());    
     }   
    }); 

provo a chiamare il metodo in onResume(), ma non funziona

Un altro tentativo di risolvere il problema, è impostato su android: layout_height su match_parent e utilizza un metodo di visualizzazione setMaximumHeight(), ma non esiste. Tuttavia, esiste setMinimumHeight() ...

Come posso risolvere questo? Grazie mille!

risposta

7

Sfortunatamente non è disponibile "setMaximumHeight" per la maggior parte delle visualizzazioni Android. Ma è possibile implementare tale ereditarietà da WebView. Ecco un esempio di come è possibile farlo:

package com.am.samples.maxheight; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.webkit.WebView; 

public class CustomWebView extends WebView { 

    private int maxHeightPixels = -1; 

    public CustomWebView(Context context, AttributeSet attrs, int defStyle, 
      boolean privateBrowsing) { 
     super(context, attrs, defStyle, privateBrowsing); 
    } 

    public CustomWebView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public CustomWebView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomWebView(Context context) { 
     super(context); 
    } 

    public void setMaxHeight(int pixels) { 
     maxHeightPixels = pixels; 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     if (maxHeightPixels > -1 && getMeasuredHeight() > maxHeightPixels) { 
      setMeasuredDimension(getMeasuredWidth(), maxHeightPixels); 
     } 
    } 
} 

Spero che questo aiuti!