为单色创建Drawable

时间:2015-09-02 19:58:58

标签: android

我有一个按钮,当点击时,我希望文本的颜色从白色变为黄色。我在drawable文件夹中创建了一个选择器XML文件。我的问题是,当state_pressed为true时,我不知道如何设置文本的颜色。我尝试使用十六进制但仍然收到以下错误:

<item> tag requires a 'drawable' attribute or child tag defining a drawable

我认为颜色必须来自我的可绘制文件夹?我终于找到了这个解决方案,但仅限于我可以使用的颜色数量

<item
    android:state_pressed="true"
    android:drawable="@android:color/holo_blue_light">
</item>

我该如何解决这个问题?我可以在我的drawable文件夹中创建单独的XML文件,只有一种我可以参考的颜色吗?如果是这样,我该怎么做?还是有一个更简单的解决方案?谢谢。

5 个答案:

答案 0 :(得分:3)

首先在你的app / resource / values中创建一个colors.xml资源文件,例如下面这个:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="gray">#D2D2D2</color>
    <color name="dark_gray">#ff838383</color>
    <color name="transparent_black">#1A000000</color>
</resources>

然后,您可以使用colors.xml中定义的颜色来创建选择器。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="false" android:color="@color/gray" />
    <item android:state_focused="true" android:state_pressed="true" android:color="@color/dark_gray" />
    <item android:state_focused="false" android:state_pressed="true" android:color="@color/dark_gray" />
    <item android:color="@color/transparent_black" />
</selector>

将xml放在res / drawable文件夹中的文件中,即res / drawable / button_text_color.xml。然后只需将drawable设置为按钮中的文本颜色:

android:textColor="@drawable/button_text_color"

答案 1 :(得分:2)

  

bg_c​​olor_white.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

          <solid android:color="@android:color/white" />

</shape>

答案 2 :(得分:1)

创建一个XML文件&#34; myCustomDrawable&#34;在您的Drawable文件夹中,如下所示:

&#13;
&#13;
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <solid android:color="@color/lightPurple"/>
        </shape>
    </item>
    <item>
        <shape>
            <solid android:color="@color/white"/>
        </shape>
    </item>
</selector>
&#13;
&#13;
&#13;

在哪里&#34; deepPurple&#34;和&#34; lightPurple&#34;在... values / colors.xml中定义为:

&#13;
&#13;
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name = "deepPurple">#673AB7</color>
    <color name = "lightPurple">#D1C4E9</color>
</resources>
&#13;
&#13;
&#13;

然后只需将Drawable文件分配到活动布局中的按钮:

&#13;
&#13;
<Button 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"
  ... 
  ... 
  android:textColor="@drawable/myCustomDrawable" 
  ... 
  .../>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

下面是一个所谓的drawable选择器示例。

将它放在/ drawable文件夹下。

你看到android:state_pressed =“true”这就是定义按下按钮时会发生什么的内容。这是您设置为黄色的颜色。

state_focused =“true”是指手指按下按钮但不放手,因此它具有焦点。您可能希望在此处将颜色更改为黄色。

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
     <item android:state_pressed="true" >
         <shape android:shape="rectangle"  >
             <corners android:radius="3dip" />
             <stroke android:width="1dip" android:color="#39678c" />
             <gradient android:angle="-90" android:startColor="#39678c" android:endColor="#39678c"  />    
             <size android:width="75dp" android:height="25dp"/>

         </shape>
     </item>
    <item android:state_focused="true">
         <shape android:shape="rectangle"  >
             <corners android:radius="8dip" />
             <stroke android:width="1dip" android:color="#696969" />
             <solid android:color="#696969"/>  
             <size android:width="75dp" android:height="25dp"/>     
         </shape>
     </item>  
    <item >
        <shape android:shape="rectangle"  >
             <corners android:radius="8dip" />
             <stroke android:width="1dip" android:color="#39678c" />
             <gradient android:angle="-90" android:startColor="#39678c" android:endColor="#39678c" />  
             <size android:width="75dp" android:height="10dp"/>          
         </shape>
     </item>
    </selector>

答案 4 :(得分:0)

我仍然遇到同样的错误,但回复让我弄清楚了。问题是我的选择器中的语法:

<item
android:state_pressed="true"
android:drawable="@android:color/holo_blue_light"> </item>

颜色HAD的语法以android:drawable =开头,否则我一遍又一遍地得到同样的错误。例如,如果我使用:

 android:color="@color/gray"

<solid android:color="@color/gray" />

它一直产生这个错误:

<item> tag requires a 'drawable' attribute or child tag defining a drawable

所以,就像它的建议一样,我在我的values文件夹中创建了一个名为colors的XML文件,并创建了一个我想要使用的颜色:

<resources>
<color name = "light_blue">#33b5e5</color>
</resources>

然后我可以在我的选择器文件中使用它,如下所示:

android:drawable="@color/light_blue""