Сложные контролирует состояние пересылки - PullRequest
4 голосов
/ 17 июня 2011

Кто-нибудь знает, каков соответствующий механизм при создании настраиваемого составного элемента управления для применения изменений состояния из контейнера ко всем дочерним элементам?Мне кажется, должен быть простой способ настроить ViewGroup для пересылки всех изменений состояния (нажатие, включение и т. Д.) Каждому дочернему элементу.

Например, если я создаю собственный виджетвдоль линий:

public class MyWidget extends RelativeLayout {

    private TextView mTitleView, mValueView;
    private ImageView mImageView;

    public ValueButton(Context context) {
        this(context, null);
    }

    public ValueButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        //View setup, etc.
    }
}

Во многих случаях к дочерним элементам прикрепляются списки рисованных или цветовых состояний, которые я хочу переключать, когда изменения применяются ко всему виджету в целом.Что мне нужно добавить в виджет, такой как этот, чтобы, например, когда я звоню MyWidget.setEnabled() или когда нажата MyWidget, эти изменения состояния фильтровали иерархию?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 17 июня 2011

Добавьте android:duplicateParentState="true" к каждому дочернему элементу (возможно, перебирая дочерние элементы, используя getChildAt(int index))

http://developer.android.com/reference/android/view/View.html#attr_android:duplicateParentState

Редактировать :вам нужно будет установить его в xml

Примечание: в текущей реализации установка этого свойства в значение true после добавления представления в ViewGroup может вообще не иметь никакого эффекта.Это свойство всегда следует использовать из XML или установить в значение true перед добавлением этого представления в ViewGroup.

0 голосов
/ 17 июня 2011

Не уверен, что мне здесь очень поможет, но мне интересно подумать, потому что я думаю, что хочу сделать что-то очень похожее.

С точки зрения каскадирования информации о состоянии вплоть до дочерних представлений, может ли один из возможных подходов содержать только эту информацию о состоянии в родительской ViewGroup, а в дочерних представлениях использовать getParent () для доступа к этой информации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...