0

我有一个 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>
4

2 回答 2

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)) 方法。

于 2013-04-08T21:49:03.797 回答
0

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

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

因此,在您的情况下,您可以使用具有定义布局的 xml 文件并膨胀以编程方式创建的按钮

于 2013-04-08T21:34:32.833 回答