Передача пользовательских атрибутов XML из пользовательского компонента пользовательского интерфейса в подкомпоненты пользовательского интерфейса - PullRequest
1 голос
/ 07 сентября 2011

У меня есть пользовательский компонент пользовательского интерфейса, который находится внутри другого пользовательского компонента пользовательского интерфейса (который разделен для удобства).

Я хочу иметь возможность передавать свои собственные атрибуты компоненту отца и читатьих внутри подкомпонента.Таким образом, единственное, что должен увидеть разработчик, это родительский компонент, без необходимости знать, что внутри есть еще один компонент.

Например, это основной макет приложения:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:udinic="http://schemas.android.com/apk/res/com.udinic"
android:id="@+id/main"
android:layout_width="fill_parent"
android:layout_height="wrap_content">

    <com.udinic.FatherComponent android:id="@+id/fatherComp"
    android:layout_width="fill_parent"
    udinic:itemNum="9"
    android:layout_height="wrap_content" />

</LinearLayout>

и xml компонента-отца выглядит так:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:udinic="http://schemas.android.com/apk/res/com.udinic"
android:id="@+id/fatherLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content">

    <com.udinic.SubComponent android:id="@+id/subComp"
    android:layout_width="fill_parent"
    udinic:itemNum=<<Get the itemNum passed to me>>
    android:layout_height="wrap_content" />

</LinearLayout>

Я не нашел способа сделать это, используя только XML * .Кто-нибудь знает что-нибудь, что может помочь решить эту проблему?

Спасибо

1 Ответ

0 голосов
/ 11 октября 2013

Вам нужно будет использовать конструктор класса вашего отца, чтобы передать значение в подкласс.

public FatherClass(Context context, AttributeSet attrs)
{
    super(context, attrs, LAYOUT);
    TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomLayout);
    //for string attribute
    textView.setText(getStringAttribute(typedArray, R.styleable.CustomLayout_labelText));
    //for resources
    int textAppearance = typedArray.getResourceId(R.styleable.CustomLayout_textAppearance, -1);
    textView.setTextAppearance(context, textAppearance);
    //for integers
    int inputType = typedArray.getInt(R.styleable.CustomLayout_inputType, -1);
    editText.setInputType(inputType);
}
...