Widget.AppCompat.Button.Colored 禁用时按钮透明
Widget.AppCompat.Button.Colored Button transparent when disabled
我正在努力对抗 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 代码获得一个很好的解决方案。我知道我可以创建自定义可绘制按钮背景。我想避免它。有什么想法吗?
解决方案是使用:<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 源代码代码使用它自己的属性,则不需要前缀。
我正在努力对抗 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 代码获得一个很好的解决方案。我知道我可以创建自定义可绘制按钮背景。我想避免它。有什么想法吗?
解决方案是使用:<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 源代码代码使用它自己的属性,则不需要前缀。