4

我想知道是否有一种方法可以为库中的 Android 复合控件(小部件)指定和样式。

我们已将库中的复合控件移动为可重用,但是当我们在 android 应用程序项目的活动中使用它们时,我们不知道如何指定自定义样式。

我们发现了这个有用的博客,可以做类似的事情,但它必须将自定义样式指定为应用程序主题,我们希望将一种样式直接应用于复合组件。

我已经尝试过这样的事情,但应用程序崩溃了。

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

1 回答 1

0

您可以像在任何其他视图中一样应用样式,就像您在问题中显示的那样。坠机的原因可能是另一个原因。请记住,复合控件的元素默认情况下不会将指定的样式应用于控件本身。例如,如果您使用 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);
}

在那里,您可以在方便时简单地使用收集的属性的值。

于 2016-02-06T03:17:31.010 回答