具有不同背景颜色的 Android 按钮
Posted
技术标签:
【中文标题】具有不同背景颜色的 Android 按钮【英文标题】:Android button with different background colors 【发布时间】:2011-04-13 22:12:06 【问题描述】:我想使用选择器 xml 文件更改按钮的背景颜色。我的方法基本上是本页底部示例中的方法:http://developer.android.com/guide/topics/resources/color-list-resource.html
我有一个 res/color/button_text.xml,看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#ffff0000"/> <!-- pressed -->
<item android:state_focused="true"
android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff000000"/> <!-- default -->
</selector>
我的布局包含以下代码:
<Button
android:layout_
android:layout_
android:text="@string/button_text"
**android:background="@color/button_text"** />
(** 只是为了告诉你我使用 android:background 而不是 android:textcolor)
此代码崩溃。它说“二进制 XML 文件第 4 行标签需要 'drawable' 属性或定义可绘制的子标签。但是如果我按照上面链接中的描述使用 android:textColor 尝试它,它工作正常。所以它必须是背景问题。我如果没有必要,不想创建一个 9patch-png(基本上我只需要一个“可点击”的矩形,所以我使用一个带有彩色背景的按钮)
【问题讨论】:
康斯坦丁的回答有一个错字-item android:color="@color/black"
行......我建议它应该阅读项目 android:drawable="@color/black" ..... ......
***.com/a/15880688/1352919
【参考方案1】:
由于您的错误状态,您必须为项目定义 drawable 属性(由于某种原因,它在涉及背景定义时是必需的),所以:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/red"/> <!-- pressed -->
<item android:state_focused="true" android:drawable="@color/blue"/> <!-- focused -->
<item android:drawable="@color/black"/> <!-- default -->
</selector>
另请注意,drawable 属性不接受原始颜色值,因此您必须将颜色定义为资源。在 res/values 文件夹中创建 colors.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="black">#000</color>
<color name="blue">#00f</color>
<color name="red">#f00</color>
</resources>
【讨论】:
item android:color="@color/black" s/b item android:drawable="@color/black" 您现在可以在您的按钮属性中使用style="@style/Widget.AppCompat.Button.Colored"
!更多信息:***.com/questions/26686250/…【参考方案2】:
在您指向的 URL 中,button_text.xml 用于设置 textColor 属性。这就是他们在 res/color 文件夹中有 button_text.xml 的原因,因此他们使用了@color/button_text.xml
但您正试图将其用于背景属性。 background 属性在 res/drawable 文件夹中寻找东西。
检查这个我从互联网上得到了这个选择器自定义按钮。我没有链接。但我感谢海报。它帮助了我。把这个放在可绘制文件夹中
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<gradient
android:startColor="@color/yellow1"
android:endColor="@color/yellow2"
android:angle="270" />
<stroke
android:
android:color="@color/grey05" />
<corners
android:radius="3dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item android:state_focused="true" >
<shape>
<gradient
android:endColor="@color/orange4"
android:startColor="@color/orange5"
android:angle="270" />
<stroke
android:
android:color="@color/grey05" />
<corners
android:radius="3dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:endColor="@color/white1"
android:startColor="@color/white2"
android:angle="270" />
<stroke
android:
android:color="@color/grey05" />
<corners
android:radius="3dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
</selector>
我在我的 main.xml 布局中使用了这样的
<Button android:id="@+id/button1"
android:layout_alignParentLeft="true"
android:layout_marginTop="150dip"
android:layout_marginLeft="45dip"
android:textSize="7pt"
android:layout_
android:layout_
android:text="@string/welcomebtntitle1"
android:background="@drawable/custombutton"/>
希望这会有所帮助。维克是正确的。
编辑:这是colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="yellow1">#F9E60E</color>
<color name="yellow2">#F9F89D</color>
<color name="orange4">#F7BE45</color>
<color name="orange5">#F7D896</color>
<color name="blue2">#19FCDA</color>
<color name="blue25">#D9F7F2</color>
<color name="grey05">#ACA899</color>
<color name="white1">#FFFFFF</color>
<color name="white2">#DDDDDD</color>
</resources>
【讨论】:
你有color.xml文件吗? @electrichead - 是的,我有它。我正在编辑我的答案。请看。 我第一次看到这个答案是在我开始使用 Android 时,我被大量的 XML 代码吓倒了,但是两个月后我又遇到了它,这是一个很好的答案在不使用图像的情况下创建自定义按钮颜色的一般问题。 这个答案比另一个完整得多,谢谢!就我而言,我删除了您必须将 selector.xml 文件放在 drwable 文件夹中。
然后写:
android:background="@drawable/selector"
。
这会处理按下和聚焦状态。
【讨论】:
【参考方案4】:在 Mono Android 中,您可以像这样使用过滤器:
your_button.Background.SetColorFilter(new Android.Graphics.PorterDuffColorFilter(Android.Graphics.Color.Red, Android.Graphics.PorterDuff.Mode.Multiply));
【讨论】:
背景应该是 getbackground()。另一种选择是使用这样的过滤器:myButton.getBackground().setColorFilter(new LightingColorFilter(multiplier, bckgrd_color));以上是关于具有不同背景颜色的 Android 按钮的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用相同的“radioButton_states”drawable并创建一个每个按钮具有不同背景颜色的radioGroup吗?