将颜色的 xml 整数数组转换为字符串数组返回空值 - 如何以编程方式将其转换为十六进制?

问题描述

我正在尝试将此颜色列表从我的 colors.xml 转换为 Java String Array

<color name="redditred">#EA0027</color>
    <color name="redditorange">#FF8717</color>
    <color name="redditlime">#94E044</color>
    <color name="redditmint">#0DD3BB</color>
    <color name="redditblue">#24A0ED</color>
    <color name="redditpink">#FF66AC</color>
    <color name="redditgold">#DDBD37</color>
    <color name="redditgrey">#A5A4A4</color>
    <color name="redditsemiblack">#222222</color>
    
    <integer-array name="redditColors">
        <item>@color/redditred</item>
        <item>@color/redditorange</item>
        <item>@color/redditlime</item>
        <item>@color/redditmint</item>
        <item>@color/redditblue</item>
        <item>@color/redditpink</item>
        <item>@color/redditgold</item>
        <item>@color/redditgrey</item>
        <item>@color/redditsemiblack</item>
    </integer-array>

我尝试使用 getResources,然后从 xml 资源文件获取 array 并打印它。它按预期返回 17 的 length。但是,当我使用 Arrays.toString() 打印十六进制值时,它给了我一个空值数组。我做错了什么,如何让我的代码打印十六进制颜色?例如:[#EA0027,#FF8717,#94E044,...... ]

String[] colors = getResources().getStringArray(R.array.redditColors);
Log.d(TAG,"onCreate: " + colors.length);
Log.d(TAG,"onCreate: " + Arrays.toString(colors));

输出

onCreate: 17
onCreate: [null,null,null]

编辑:

String[] colors = getResources().getStringArray(R.array.redditColors);
for(int i = 0; i < colors.length; i++){
   String hexInString = String.format("#%06X",(0xFFFFFF & colors[i]));
   Log.d(TAG,"onCreate: hex: " + hexInString);
}

解决方法

您应该使用 getIntArray() 而不是 getStringArray() 并使用 Hex 转换为 Integer.toHexString()

int[] colors = getResources().getIntArray(R.array.redditColors);

for (int color : colors) {
    String ColorString = "#" + Integer.toHexString(color);
    Log.d("LOG_TAG","Hex Color: " + ColorString);
}

结果:

2021-01-04 08:22:11.819 32308-32308/com.example.... D/LOG_TAG: Hex Color: #ffea0027
2021-01-04 08:22:11.819 32308-32308/com.example.... D/LOG_TAG: Hex Color: #ffff8717
2021-01-04 08:22:11.820 32308-32308/com.example.... D/LOG_TAG: Hex Color: #ff94e044
2021-01-04 08:22:11.820 32308-32308/com.example.... D/LOG_TAG: Hex Color: #ff0dd3bb
2021-01-04 08:22:11.820 32308-32308/com.example.... D/LOG_TAG: Hex Color: #ff24a0ed
2021-01-04 08:22:11.820 32308-32308/com.example.... D/LOG_TAG: Hex Color: #ffff66ac
2021-01-04 08:22:11.820 32308-32308/com.example.... D/LOG_TAG: Hex Color: #ffddbd37
2021-01-04 08:22:11.820 32308-32308/com.example.... D/LOG_TAG: Hex Color: #ffa5a4a4
2021-01-04 08:22:11.820 32308-32308/com.example.... D/LOG_TAG: Hex Color: #ff222222
,

颜色十六进制值不是字符串。所以像#FFFFFF 这样的东西不会转换为字符串“#FFFFF”。

要根据需要获取数组,您可以遍历 colors 数组并使用以下代码将每个颜色十六进制转换为字符串,然后将其存储在新数组中。

String hexInString = String.format("#%06X",(0xFFFFFF & intColor));