我想简单地设计一个Button
的样式。我只是希望它在没有按下时带有文本的蓝色,在点击时带有蓝色文本的白色。
我尝试使用样式和选择器执行此操作。
在我的布局中,我有Button
:
<Button
android:id="@+id/button1"
style="@style/MyButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/login" />
在res/values/styles
我有styles.xml
:
<style name="MyButton">
<item name="android:background">@drawable/btn_background</item>
<item name="android:textColor">@drawable/btn_textcolor</item>
</style>
当然,两个选择器位于res/drawable
,btn_background.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="@color/white" />
<item android:color="@color/SapphireBlue" />
</selector>
和btn_textcolor.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="@color/SapphireBlue" />
<item android:color="@color/white" />
</selector>
当我运行应用程序或打开布局编辑器时,我现在得到的错误是:
&LT;项目&GT;标签需要'drawable'属性
我理解这条消息,但我没有一个可绘制的,是一个简单的扁平按钮。
如何创建这样一个简单的按钮?
根据{{3}}更新,它应该有效。
答案 0 :(得分:22)
请尝试这种方式,希望这有助于您解决问题。
<强> btn_background.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/white" android:state_pressed="true"></item>
<item android:drawable="@drawable/white" android:state_focused="true"></item>
<item android:drawable="@drawable/SapphireBlue" android:state_enabled="true" android:state_focused="false" android:state_pressed="false"></item>
<item android:drawable="@drawable/white" android:state_enabled="false"></item>
</selector>
<强> btn_textcolor.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/SapphireBlue" android:state_pressed="true"></item>
<item android:color="@drawable/SapphireBlue" android:state_focused="true"></item>
<item android:color="@drawable/white" android:state_enabled="true" android:state_focused="false" android:state_pressed="false"></item>
<item android:color="@drawable/SapphireBlue" android:state_enabled="false"></item>
</selector>
答案 1 :(得分:0)
/res/color/my_textcolor_selctor.xml /res/drawable/my_background_selector.xml
此外,drawable选择器必须对选择器项使用'android:drawable'(颜色资源可用于属性值,因为颜色是可绘制的), 而颜色选择器必须使用'android:color'作为选择项。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
android:drawable="@color/disabledbackgroundColor" />
<!-- default -->
<item android:drawable="@color/myBackgroundColor" />
</selector>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
android:color="@color/disabledColor" />
<!-- default -->
<item android:color="@color/defaultColor" />
</selector>
答案 2 :(得分:0)
android:background
似乎接受可绘制的选择器但不接受颜色选择器...所以只留下一个颜色作为android:background
,并使用一个普通的颜色选择器和android:backgroundTint,它总是需要颜色:< / p>
styles.xml上的
:
<style name="MyButton">
<item name="android:background">@color/some_fixed_color</item>
<item name="android:backgroundTint">@color/background_color_selector</item>
<item name="android:textColor">@drawable/btn_textcolor</item>
</style>
(res/color/background_color_selector.xml
是普通的颜色选择器。)