8

我试图非常简单地设计一个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>

当然,还有两个选择器, in 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>

我现在运行应用程序或打开布局编辑器时遇到的错误是:

<item> 标签需要 'drawable' 属性

我理解这个消息,但我没有一个可绘制的,它是一个简单的平面按钮。

我怎样才能创建这样一个简单的按钮?

根据这篇文章更新,它应该可以工作。

4

3 回答 3

24

试试这个方法,希望这能帮助你解决你的问题。

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>
于 2013-09-20T11:41:38.227 回答
3
  • 背景属性需要一个可绘制对象,并且可绘制选择器必须位于 /drawable 文件夹之一中。
  • TextColor 属性需要一种颜色,并且颜色选择器必须位于 /color 文件夹之一中。
/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>
于 2017-03-17T20:36:59.377 回答
2

android:background似乎接受可绘制选择器但不接受颜色选择器......所以只需留下一个颜色作为你的android:background,并使用带有 android:backgroundTint 的普通颜色选择器,它无论如何都需要颜色:

在样式.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是一个普通的颜色选择器。)

于 2018-05-06T07:22:22.697 回答