<item>标记需要'drawable'属性</item>

时间:2013-09-20 09:53:56

标签: android android-layout

我想简单地设计一个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/drawablebtn_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}}

更新,它应该有效。

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)

  • Background属性需要drawable,drawable选择器必须位于/ drawable文件夹之一。
  • TextColor属性需要一种颜色,颜色选择器必须位于其中一个/颜色文件夹中。
/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是普通的颜色选择器。)