您可以像在任何其他视图中一样应用样式,就像您在问题中显示的那样。坠机的原因可能是另一个原因。请记住,复合控件的元素默认情况下不会将指定的样式应用于控件本身。例如,如果您使用 FrameLayout 和 EditText 创建复合控件,则设置复合控件的背景将尝试应用于 FrameLayout(控件的父持有者),而不是内部的元素除非您明确确定它(按钮和 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);
}
在那里,您可以在方便时简单地使用收集的属性的值。