2010-08-22 7 views
5

Ho una vista personalizzata e desidero semplicemente accedere al valore di layout xml di layout_height.Come accedere a layout_height dalla mia vista personalizzata?

Attualmente sto ricevendo quell'informazione e memorizzandola durante onMeasure, ma ciò accade solo quando la vista viene prima dipinta. La mia vista è una trama XY e deve conoscere la sua altezza il prima possibile in modo che possa iniziare a eseguire i calcoli.

La vista è sulla quarta pagina di un layout viewFlipper, quindi l'utente non può capovolgersi per un po ', ma quando lo fanno, vorrei che la vista contenga già dei dati, il che richiede che io avere l'altezza per fare i calcoli.

Grazie !!!

risposta

4

Da pubblica View (contesto contesto, attrs AttributeSet) docs costruttore:

Constructor che viene chiamato quando gonfiare una vista da XML. Questo è chiamato quando una vista è costruita da un file XML, che fornisce gli attributi che erano specificati nel file XML.

in modo da ottenere quello che ti serve, forniscono un costruttore alla visualizzazione personalizzata che prende attributi come parametro, e cioè:

public CustomView(final Context context, AttributeSet attrs) { 
    super(context, attrs); 
    String height = attrs.getAttributeValue("android", "layout_height"); 
    //further logic of your choice.. 
} 
+0

Lo spazio dei nomi dovrebbe essere "http://schemas.android.com/apk/res/android" (preceduto da http: //), altrimenti l'altezza sarà nullo. –

11

che funzionano:) ... è necessario cambiare "Android" per "http://schemas.android.com/apk/res/android"

public CustomView(final Context context, AttributeSet attrs) { 
    super(context, attrs); 
    String height = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "layout_height"); 
    //further logic of your choice.. 
} 
+0

Ho provato attrs.getAttributeValue ("android", "layout_width") e ha restituito null. Poi ho provato la tua soluzione e ha funzionato. Grazie! –

3

È possibile utilizzare questo:

public CustomView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 

    int[] systemAttrs = {android.R.attr.layout_height}; 
    TypedArray a = context.obtainStyledAttributes(attrs, systemAttrs); 
    int height = a.getDimensionPixelSize(0, ViewGroup.LayoutParams.WRAP_CONTENT); 
    a.recycle(); 
} 
+1

È importante chiamare 'a.recycle();' dopo aver ottenuto l'altezza. – lpmfilho

+0

@ lpmfilho hai il mio permesso per correggere il codice –

Problemi correlati