2014-11-03 8 views
11

tworzę niestandardowego widoku związek z następującym układzieReuse standardowy atrybut android na mojego widoku niestandardowego

<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> 

Jak widać, jest to po prostu TextView i EditText. Chcę mieć możliwość wyświetlania atrybutów w moim widoku niestandardowym, które są przesyłane dalej do TextView lub EditText. Na przykład

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

I zorientowali się, jak do przekazania tych ciąg przypisuje TextView i 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(); 
    } 

Teraz chcę też ustawić inputType o EditText. Jeśli utworzę tag <attr name="inputType" format="flag">, czy będę musiał wypełnić go wszystkimi możliwymi wartościami flag? Czy istnieje sposób ponownego użycia wartości już zadeklarowanych przez EditText?

+0

Twój opis jest niejasny. próbujesz powiedzieć, że chcesz, aby ten sam znacznik atrybutu był wspólny dla wszystkich komponentów? – prashantwosti

+0

@prashantwosti Nie, chcę atrybut 'label', który ustawia' android: text' atrybutu 'TextView' i' hint', który ustawia 'android: hint'' EditText'. Są proste, ponieważ są tylko ciągami. Jednak chcę również 'inputType', który ustawia' Android: inputType' dla 'EditText'. Ale nie chcę przepisywać kodu dla wszystkich możliwych wartości. –

+0

Zbuduję odpowiednią SSCCE, aby lepiej zilustrować. –

Odpowiedz

1

Formularz ten można uzyskać z:

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

Wydaje się być blisko tego, co chcę. Jednak tak naprawdę nie ustawia 'inputType' z' EditText' zamkniętego w moim widoku niestandardowym. Poza tym wolałbym raczej przekazać wszystkie atrybuty słowom "EditText" i pozwolić je samemu wydobywać, zamiast pisać wszystkie linie kodu, aby samemu wyodrębnić każdy atrybut. –

Powiązane problemy