Пользовательский стиль для составного компонента в библиотеке Android - PullRequest
3 голосов
/ 28 февраля 2012

Хотелось бы узнать, есть ли способ указать и стиль для составного элемента управления Android (виджета) в библиотеке.

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

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

Я пробовал что-то подобное, но приложение вылетает.

<MyLibraryNameSpace.MyCompoundComponent ...... style="@style/StyleForMyCompoundComponent"> 

1 Ответ

0 голосов
/ 06 февраля 2016

Вы можете применять стили так же, как и к любому другому представлению, так же, как вы показываете свой вопрос. Возможно, причина аварии была другая. Помните, что элементы ваших составных элементов управления по умолчанию не применяют стиль, указанный для самого элемента управления. Например, если вы создаете составной элемент управления с FrameLayout, содержащим Button и EditText, установка фона вашего составного элемента управления будет пытаться применяться к FrameLayout (родительскому владельцу вашего элемента управления), а не к элементам внутри его (Button и EditText), если вы не определите это явно.

Если вы хотите добавить пользовательские методы для вашего компонента, вы можете сделать это в вашем attrs.xml. Предположим, например, что вы хотите предоставить свойство для изменения соотношения сторон вашего компонента:

<?xml version="1.0" encoding="utf-8"?>
<resources>
...

    <declare-styleable name="MyCompoundComponent">
        <attr name="aspectRatio" format="float"/>
    </declare-styleable>

</resources>

Затем в конструкторе вашего пользовательского элемента управления вы можете получить значение этих пользовательских реквизитов:

...
public MyCompoundComponent(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);

    if (attrs == null) return;

    TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyCompoundComponent, defStyleAttr, 0);
    this.aspectRatio = typedArray.getFloat(R.styleable.MyCompoundComponent_aspectRatio, 1);
}

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

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