Подтвердить что ты не робот

Повторное использование стандартного андроидного атрибута в моем пользовательском представлении

Я создаю настраиваемый составной вид со следующим макетом

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

Как вы можете видеть, это просто TextView и a EditText. Я хочу иметь возможность предоставлять атрибуты для моего настраиваемого представления, которые перенаправляются на TextView или EditText. Например

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

Я понял, как перенаправить эти строковые атрибуты в TextView и 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();
    }

Теперь я также хочу установить inputType для EditText. Если я создаю тэг <attr name="inputType" format="flag">, мне нужно будет заполнить его всеми возможными значениями флага? Есть ли способ повторно использовать значения, уже объявленные EditText?

4b9b3361

Ответ 1

Вы можете получить это с помощью:

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