【问题标题】:How to apply a res/color/xml style to a button created dynamically如何将 res/color/xml 样式应用于动态创建的按钮
【发布时间】:2013-03-31 03:13:44
【问题描述】:

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

【问题讨论】:

  • color/btn_black 的 XML 是什么?
  • 确实有一个名为 btn_black.xml 的文件还是什么?
  • 在上面添加了 btn_black.xml。

标签: java android eclipse


【解决方案1】:

看起来像是您的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))方法。

【讨论】:

  • 参见上面的附加 xml。它不仅仅是一种颜色,它是一种风格。它在 xml 布局中工作得非常好,我只需要知道如何在 Java 中应用它。
  • 要使其成为一种样式,请在 /res/values/styles.xml 中为您的按钮定义一个样式,并在 /res/drawable/my_gradient.xml 中定义一个渐变,您可以将其添加到您的样式中​​@drawable/my_gradient
  • 您可以在此讨论中查看如何为按钮制作样式:stackoverflow.com/questions/6608170/…
  • 如何使选择器可绘制,你可以阅读这篇文章:stackoverflow.com/questions/4692642/…
  • 我把它放在哪个可绘制文件夹(hdpi、mdpi、xhdpi 等)是否重要?每个drawable文件夹中是否需要有一个副本?
【解决方案2】:

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

查看此问题以获取具体帮助android set style in code

因此,在您的情况下,您可以将 xml 文件与定义的布局一起使用,并对以编程方式创建的按钮进行膨胀

【讨论】:

  • 这部分有帮助。我将代码更改为 Button myButton = new Button(EventsActivity.this, null, R.color.btn_black);它不再崩溃,但按钮不显示。只是文字。 (现在连默认的灰色按钮都看不到了。)
猜你喜欢
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
相关资源
最近更新 更多