如何将res / color / xml样式应用于动态创建的按钮

时间:2013-04-08 21:22:51

标签: java android eclipse

我有一个xml文件res / color / btn_black,它允许我对按钮应用渐变外观。

我可以通过调用:

成功地在layout.xml中使用它
<Button
    android:background="@color/btn_black"
/>

在其他地方,我用Java动态创建按钮,我想应用相同的样式。当我尝试使用时:

myButton.setBackgroundColor(getResources().getColor(R.color.btn_black));

我收到此错误:

android.content.res.Resources$NotFoundException: 
  File res/color/btn_black.xml from color state list resource ID #0x7f040001

这似乎是我在这里找到的其他问题的正确方法,但它对我不起作用。我做错了什么?

编辑:这是文件btn_black.xml以供参考

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="true" >
    <shape>
        <solid
            android:color="#343434" />
        <stroke
            android:width="1dp"
            android:color="#171717" />
        <corners
            android:radius="3dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
  </item>
  <item>
    <shape>
        <gradient
            android:startColor="#343434"
            android:endColor="#171717"
            android:angle="270" />
        <stroke
            android:width="1dp"
            android:color="#171717" />
        <corners
            android:radius="4dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
  </item>
</selector>

2 个答案:

答案 0 :(得分:2)

看起来像colors.xml中的颜色以错误的方式定义。您的colors.xml应如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="btn_black">#000000</color>
</resources>

如我所见,你已经定义了res / color / btn_black.xml,出了什么问题。您需要在/ res / values /目录中创建colors.xml文件。

如果你有一个渐变xml文件,那么你需要把它放在/ res / drawable /文件夹中并调用myButton.setBackground(getResources()。getDrawable(R.drawable.btn_black))方法。

答案 1 :(得分:0)

我认为最好的解决方案是为具有特定样式的按钮定义布局。 然后,您可以使用您创建的布局来膨胀按钮。

请参阅此问题以获取具体帮助android set style in code

因此,在您的情况下,您可以使用具有已定义布局的xml文件并对以编程方式创建的按钮进行充气