Как передать пользовательские атрибуты во вложенный XML - PullRequest
0 голосов
/ 29 мая 2018

у меня такая структура*

Я хотел бы передать значение myCustomMessage (я упустил другие атрибуты для упрощения) из MyCustomPreference в MyCustomView с использованием XML.MyCustomView считывает пользовательские атрибуты, поэтому я хотел бы избежать программного чтения атрибутов в MyCustomPreference, получения TextViews из MyCustomView и установки их значений.Однако я действительно не знаю, что печатать вместо «?????».

Как я могу сделать это с помощью XML?Это возможно?

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Создайте файл атрибута для вашего customeView:

Добавьте в attrs.xml

<declare-styleable name="CustomView">
    <attr name="width" format="dimension" />
</declare-styleable>

Используется в вашем пользовательском init:

 public CustomView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyle, 0);
    mWidth = a.getDimensionPixelSize(R.styleable.CustomView_width,0);
    a.recycle();
}
0 голосов
/ 29 мая 2018

Вы должны сделать это программно (если вы не используете data binding).Например, в вашем MyCustomPreference вы ловите атрибут de myCustomMessage:

String myCustomMessage = null;
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyCustomPreference, 0, 0);
try {
  myCustomMessage = a.getString(R.styleable.MyCustomPreference_myCustomMessage);
} finally {
  a.recycle();
}

Здесь вы получили значение String вашего атрибута.Затем я полагаю, что вы накачали свой MyCustomView внутри своего MyCustomPreference.В качестве примера:

View.inflate(getContext(), R.layout.preference_my_custom, this);
MyCustomView myCustomView = (MyCustomView) findViewById(R.id.you_custom_view_id);

Итак, здесь вы можете программно установить myCustomMessage в вашем MyCustomView.

myCustomView.setMyCustomMessage(myCustomMessage);

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

Теперь, изменив свой String resId в preferences.xml, интерфейс должен обновиться, как ожидается.

PS:Поскольку я не знаю все ваши идентификаторы ресурсов, пожалуйста, адаптируйте их под ваш проект.

...