Android:样式未应用于自定义视图

时间:2014-05-19 15:09:26

标签: android

我有一个自定义复合视图,xml为:

<merge
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/va_footer_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/card_background">

    <TextView
        android:id="@+id/tv_footer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/str_load_older_results"
        android:layout_gravity="center"/>

    <ProgressBar
        android:id="@+id/pgbr_footer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"/>

</merge>

正如我所料,后台属性会被忽略,因为它在合并标记上指定。 接下来,我在attrs.xml中为我的视图声明了一个属性

<declare-styleable name="SitesFooter">
    <attr name="sitesFooterStyle" format="reference"/>
</declare-styleable>

和styles.xml中的相应样式为:

<style name="sitesFooterStyle" parent="AppTheme">
    <item name="android:background">@drawable/card_background</item>
    <item name="android:padding">@dimen/card_padding</item>
</style>

在我的自定义SitesFooter的构造函数中,我使用defStyle参数应用此属性:

public SitesFooter( Context context )
{
    this( context, null, R.attr.sitesFooterStyle );
}

public SitesFooter( Context context, AttributeSet attrs )
{
    this( context, attrs, R.attr.sitesFooterStyle );
}

public SitesFooter( Context context, AttributeSet attrs, int defStyle )
{
    super( context, attrs, defStyle );
    // inflate other views.
}

但这种风格并没有得到应用。该视图不会从XML中膨胀,因此我无法使用style属性。

我过去已经成功应用了这种方式,但现在它还没有用。有什么想法吗?

0 个答案:

没有答案