我想知道是否有一种方法可以为库中的Android复合控件(窗口小部件)指定和设置样式。
我们已将库中的复合控件移动为可重用的,但是当我们在Android应用程序项目的活动中使用它们时,我们不知道如何指定自定义样式。
我们找到了这个helpful blog来做类似的事情,但它必须将自定义样式指定为应用程序主题,并且我们希望将一种样式直接应用于复合组件。
我尝试了类似的东西,但应用程序崩溃了。
<MyLibraryNameSpace.MyCompoundComponent ...... style="@style/StyleForMyCompoundComponent">
答案 0 :(得分:0)
您可以像对待任何其他视图一样应用样式,就像您在问题中显示一样。碰撞的原因可能与众不同。请记住,默认情况下,复合控件的元素不会应用指定给控件本身的样式。例如,如果您使用包含Button和EditText的FrameLayout创建复合控件,则设置复合控件的背景将尝试应用于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);
}
在那里,只要方便,您就可以简单地使用收集属性的值。