Вы можете применять стили так же, как и к любому другому представлению, так же, как вы показываете свой вопрос. Возможно, причина аварии была другая. Помните, что элементы ваших составных элементов управления по умолчанию не применяют стиль, указанный для самого элемента управления. Например, если вы создаете составной элемент управления с 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);
}
Оказавшись там, вы можете просто использовать значение для собранных свойств в любое удобное время.