如何从XML访问XML类型的数组资源?

时间:2015-12-26 03:31:48

标签: android xml

我在 colors.xml 文件中制作了一系列带颜色的项目:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
    <array name="rectangle_colors">
        <item>
            <color>#77aa3535</color>
        </item>
        <item>
            <color>#44cc1818</color>
        </item>
        <item>
            <color>#ff1068</color>
        </item>
        <item>
            <color>#6090cc</color>
        </item>
        <item>
            <color>#6040aa</color>
        </item>
    </array>
</resources>

我想在Java和其他XML文件中访问这些颜色。我发现了很多关于如何使用Java访问它们的帮助,但是除了文档here之外,我没有在XML中访问它们。我无法弄清楚如何使用他们提供的模式:

@[package:]array.array_name

我试过了:

android:background="@[com.example.jason.miniproject].array.rectangle_colors[0]"

但它不起作用。

除了在我开始输入正确位置时弹出的自动完成功能之外,我有没有办法浏览Android Studio中的所有XML资源值?

另外,我是否会采取这种错误方式?我有一堆视图,我希望这些视图以不同的背景颜色开始。我想从XML文件中获取这些颜色。然后,当用户与应用程序交互时,我想在Java中更改这些颜色。新颜色将是初始颜色的变化,因此我想要在Java中迭代初始颜色。我存储这些颜色的方法是个好主意吗?

2 个答案:

答案 0 :(得分:0)

以XML格式访问此数组并不起作用。您可以像在colors.xml中那样存储它们,但是您可以动态访问颜色,例如,在onCreate()方法中。

在这个例子中,我访问Array的第一种颜色,并用这种颜色设置LinearLayout背景:

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //
            LinearLayout layout = (LinearLayout) findViewById(R.id.teste);
            Resources resources = getResources();
            int color[] = resources.getIntArray(R.array.rectangle_colors);
            layout.setBackgroundColor(resources.getColor(color[0]));
          }

我阅读了您发布的文档,但它并没有说明如何从数组中访问所需的项目。

实际上它是一样的:

@[package]:array/array_name

使用

@array/array_name

如果您提到的套餐是您自己的

答案 1 :(得分:0)

可能的解决方法

<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>

    <color name="rectangle_colors1">#77aa3535</color>
    <color name="rectangle_colors2">#44cc1818</color>
    <color name="rectangle_colors3">#ff1068</color>
    ....
    <array name="rectangle_colors">
        <item>
            <color>@color/rectangle_colors1</color>
        </item>
        <item>
            <color@color/rectangle_colors2</color>
        </item>
        <item>
            <color>@color/rectangle_colors3</color>
        </item>
       .....
    </array>
</resources>

有关详细信息,请参阅Referencing a string in a string array resource with xml