Widget.AppCompat.Button.Colored按钮在禁用时透明

时间:2017-01-13 21:57:36

标签: android android-layout android-appcompat

我正在尝试对抗Widget.AppCompat.Button.Colored样式的默认行为。默认情况下,该按钮是半透明的。我希望它不透明。 这是我的代码:

布局中的按钮:

<Button
    android:id="@+id/search"
    style="@style/Widget.AppCompat.Button.Colored"
    android:theme="@style/AccentButton"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Search"/>

styles.xml

<style name="AccentButton" parent="ThemeOverlay.AppCompat.Light">
    <item name="colorAccent">@color/colorAccent</item>
    <item name="colorButtonNormal">#f00</item>
</style>

如果我删除style="@style/Widget.AppCompat.Button.Colored"部分,则按钮在禁用时不会变为透明。

我试图查看Appcompat / Android源代码。虽然没有运气。我找不到它被设置为透明的部分。目标是使用大多数AppCompat代码获得一个很好的解决方案。我知道我可以创建一个自定义的可绘制按钮背景。我想避免它。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

解决方案是使用:<item name="android:disabledAlpha">1.0</item>,如下所示:

<style name="AccentButton" parent="ThemeOverlay.AppCompat.Light">
    <item name="colorAccent">@color/colorAccent</item>
    <item name="colorButtonNormal">#f00</item>
    <item name="android:disabledAlpha">1.0</item>
</style>

我如何得到这个答案

经过一番努力,我找到了btn_colored_material.xml源代码。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false"
          android:alpha="?attr/disabledAlpha"
          android:color="?attr/colorButtonNormal" />
    <item android:color="?attr/colorAccent" />
</selector>

它使用disabledAlpha属性。所以这只是使用它的问题。

我还有一件事就是为什么我必须使用android:前缀。我希望如此:

    要使用?android:attr/something 设置
  • <item name='android:something'>(...) 要使用?attr:something
  • 设置
  • <item name='something'>(...)

我的猜测是,如果Android soruce代码使用它自己的属性,则不需要前缀。