AppCompatButton和buttonStyle

时间:2017-01-20 22:47:53

标签: android android-appcompat android-theme

我正在尝试使用AppCompat库为Android 4.4设备使用Material Design样式(特别是accentColor着色)。我在以下方面取得了成功:

        <android.support.v7.widget.AppCompatButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/continue_button"
            android:id="@+id/continue_button"
            android:layout_gravity="center_horizontal|bottom"
            style="@style/CompatButton"
            android:theme="@style/ThemeOverlay.AppCompat.Dark"/>

其中&#34; @ style / CompatButton&#34;有&#34; Widget.AppCompat.Button.Colored&#34;为父母。但是我的一些按钮是相同的,但我没有在元素中声明样式,而是将样式作为默认值&#34; buttonStyle&#34;在使用的主题中:

<style name="AppTheme">
    ...
    <item name="android:buttonStyle">@style/CompatButton</item>
    <item name="colorAccent">@color/flow_accent</item>
    ...
</style>

        <android.support.v7.widget.AppCompatButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/continue_button"
            android:id="@+id/continue_button"
            android:layout_gravity="center_horizontal|bottom"
            android:theme="@style/ThemeOverlay.AppCompat.Dark"/>

这些按钮显示默认的非材质样式。 ProgressBar似乎也会发生这种情况。任何人都可以看到这有什么问题,是否有解决方法而无需明确定义按钮样式?

1 个答案:

答案 0 :(得分:0)

哎呀,愚蠢的。显然,ThemeOverlay消除了之前的主题,包括buttonStyle定义。要使它工作,我们必须将buttonStyle添加回来:

    <style name="FlowOverlay" parent="ThemeOverlay.AppCompat.Dark">
        <item name="android:buttonStyle">@style/CompatButton</item>
    </style>

        <android.support.v7.widget.AppCompatButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/continue_button"
            android:id="@+id/continue_button"
            android:layout_gravity="center_horizontal|bottom"
            android:theme="@style/FlowOverlay"/>

虽然这首先从默认按钮样式中失去了我们想要的大部分便利。