2014-11-03 16 views
11

sto creando una vista composto personalizzato con la seguente disposizioneRiutilizzare un attributo standard di Android sul mio visualizzazione personalizzata

<merge xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal"> 

    <TextView 
     android:id="@+id/label" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

    <EditText 
     android:id="@+id/edit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="text" 
     android:singleLine="true"/> 

</merge> 

Come si può vedere, si tratta semplicemente di un TextView e EditText. Desidero essere in grado di fornire attributi alla mia visualizzazione personalizzata inoltrati allo TextView o EditText. Per esempio

<codeguru.labelededittext.LabeledEditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:label="@string/label" 
    app:hint="@string/hint"/> 

ho capito come trasmettere questi stringa attribuisce al TextView e EditText, repsectively:

TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.LabeledEditText, 
      0, 0); 

    try { 
     label.setText(a.getString(R.styleable.LabeledEditText_label)); 
     edit.setHint(a.getString(R.styleable.LabeledEditText_hint)); 
    } finally { 
     a.recycle(); 
    } 

Ora voglio anche impostare la inputType del EditText. Se creo un tag <attr name="inputType" format="flag">, dovrò popolarlo con tutti i possibili valori di flag? C'è un modo per riutilizzare i valori già dichiarati da EditText?

+0

tua descrizione non è chiara. stai cercando di dire che vuoi che lo stesso tag di attributo sia comune in tutti i componenti? – prashantwosti

+0

@prashantwosti No, voglio un attributo 'label' che imposta 'android: text' dell'attributo' TextView' e 'hint' che imposta' android: hint' di' EditText'. Questi sono semplici perché sono solo stringhe. Tuttavia, voglio anche un 'inputType' che imposta' android: inputType' per 'EditText'. Ma non voglio riscrivere il codice per tutti i possibili valori. –

+0

Costruirò un SSCCE corretto per illustrare meglio. –

risposta

1

è possibile ottenere questo con:

int[] values = new int[]{android.R.attr.inputType}; 
TypedArray standardAttrArray = getContext().obtainStyledAttributes(attrs, values); 
try { 
    mInputType = standardAttrArray.getInt(0, EditorInfo.TYPE_NULL); 
} finally { 
    standardAttrArray.recycle(); 
} 
+1

Questo sembra vicino a quello che voglio. Tuttavia, in realtà non imposta il 'inputType' di' EditText' incapsulato nella mia visualizzazione personalizzata. Inoltre, preferirei semplicemente inoltrare tutti gli attributi a detto "EditText" e lasciarli estrarre da soli piuttosto che scrivere tutte le righe di codice per estrarre ogni singolo attributo. –

Problemi correlati