Подтвердить что ты не робот

Как сохранить цвета в array.xml и вернуть его в Color [] array

Как сохранить значения цвета внутри array.xml и вернуть его обратно в мой код в качестве Color [] array?

Спасибо заранее!

4b9b3361

Ответ 1

Определите свои цветовые ресурсы, затем добавьте их в массив для доступа.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="bright_pink">#FF007F</color>
    <color name="red">#FF0000</color>
    <color name="orange">#FF7F00</color>
    <color name="yellow">#FFFF00</color>
    <color name="chartreuse">#7FFF00</color>
    <color name="green">#00FF00</color>
    <color name="spring_green">#00FF7F</color>
    <color name="cyan">#00FFFF</color>
    <color name="azure">#007FFF</color>
    <color name="blue">#0000FF</color>
    <color name="violet">#7F00FF</color>
    <color name="magenta">#FF00FF</color>

    <array name="rainbow">
        <item>@color/bright_pink</item>
        <item>@color/red</item>
        <item>@color/orange</item>
        <item>@color/yellow</item>
        <item>@color/chartreuse</item>
        <item>@color/green</item>
        <item>@color/spring_green</item>
        <item>@color/cyan</item>
        <item>@color/azure</item>
        <item>@color/blue</item>
        <item>@color/violet</item>
        <item>@color/magenta</item>
    </array>
</resources>

Затем обращайтесь к ним следующим образом:

int[] rainbow = context.getResources().getIntArray(R.array.rainbow);

for (int i = 0; i < tileColumns; i++) {
    paint.setColor(rainbow[i]);
    // Do something with the paint.
}

Ответ 2

Если это в файле array.xml:

<resources>
    <array name="colors">
        <item>#ffffff</item>
        <item>#000000</item>
    </array>
</resources>

Это даст вам значения цвета для этого массива:

TypedArray ta = context.getResources().obtainTypedArray(R.array.colors);
int[] colors = new int[ta.length()];
for (int i = 0; i < ta.length(); i++) {
    colors[i] = ta.getColor(i, 0);
}
ta.recycle();

Это просто расширяет пример TypedArray в документах: http://developer.android.com/guide/topics/resources/more-resources.html#TypedArray

Надеюсь, что это поможет!

Ответ 3

colors.xml

<resources>
    <string-array name="colors">        
        <item>#ff0000</item>
        <item>#00ff00</item>  
        <item>#0000ff</item>
    </string-array>
</resources>

Код в классе активности.

String[] allColors = context.getResources().getStringArray(R.array.colors);

Color.parseColor(allColors[0]) // red
Color.parseColor(allColors[1]) // green
Color.parseColor(allColors[2]) // blue

Ответ 4

Я не могу опубликовать комментарий, поэтому я должен добавить это как новый ответ. Я полностью согласен с Sky Kelsey w.r.t. выбор дизайна использования типа ресурса цвета. Тем не менее, я нашел, что предлагаемый метод доступа к ним не работает. Именно так я реализовал использование массива XML, чтобы легко прокручивать список цветов и применять цвета к различным (индивидуально окрашенным) представлениям.

Сначала массив в файле arrays.xml:

    <array name="ingr_color_arr">
      <item>@color/ingr_red1</item>
      <item>@color/ingr_orange1</item>
      <item>@color/ingr_yellow1</item>
      <item>@color/ingr_green1</item>
      <item>@color/ingr_blue1</item>
      <item>@color/ingr_violet1</item>
      <item>@color/ingr_red2</item>
      <item>@color/ingr_orange2</item>
      <item>@color/ingr_yellow2</item>
      <item>@color/ingr_green2</item>
      <item>@color/ingr_blue2</item>
      <item>@color/ingr_violet2</item>
   </array>

Затем в color.xml:

<color name="ingr_red1">#FFCC0000</color>
<color name="ingr_orange1">#FFED5F21</color>
<color name="ingr_yellow1">#FFFAE300</color>
<color name="ingr_green1">#FF5B9C0A</color>
<color name="ingr_blue1">#FF0A0D9C</color>
<color name="ingr_violet1">#FF990A9C</color>
<color name="ingr_red2">#FFFFCCCC</color>
<color name="ingr_orange2">#FFFFEACC</color>
<color name="ingr_yellow2">#FFFFFECC</color>
<color name="ingr_green2">#FFC7F5C4</color>
<color name="ingr_blue2">#FFC4DAF4</color>
<color name="ingr_violet2">#FFE1C4F4</color>

Затем, чтобы использовать его:

TypedArray ta = res.obtainTypedArray(R.array.ingr_color_arr);
int colorToUse = ta.getResourceId(intGroupNum.intValue() - 1, R.color.recipe_detail_border);
paint.setColor(colorToUse);

Ключ здесь - использовать getResourceId, потому что setColor (int) ожидает идентификатор ресурса для цвета. Я получал ошибки "Ресурс не найден", когда пытался получить значение с помощью getIntArray() или getColor().

Самый популярный ответ может работать... Я не пробовал, потому что я предпочел лучше выбирать дизайн "массива цветов".

Ответ 5

В Котлине это будет намного проще

 val colors = resources.obtainTypedArray(R.array.colors).use { ta ->
     IntArray(ta.length()) { ta.getColor(it, 0) }
 }

Ответ 6

Color.xml:

 <string-array name="listcolors">
        <item>#448AFF</item>
        <item>#FFC107</item>
        <item>#009688</item>
        <item>#ff8000</item>
        <item>#ffbf00</item>
        <item>#0000ff</item>
        <item>#936c6c</item>
        <item>#7733ff</item>
        <item>#7733ff</item>
        <item>#ff8000</item>
        <item>#448AFF</item>
        <item>#0000ff</item>
    </string-array>

файл Activity.java

Context context;
 String[] colors = context.getResources().getStringArray(R.array.listcolors);

 String bg_color = colors[i]; //i=1,2,3...

Ответ 7

<color name="gblue">#4285F4</color>
<color name="ggreen">#34A853</color>
<color name="gyellow">#FBBC05</color>
<color name="gred">#EA4335</color>

<array name="google_colors">
    <item>@color/gblue</item>
    <item>@color/ggreen</item>
    <item>@color/gyellow</item>
    <item>@color/gred</item>
</array>

Используйте это в Java/Kotlin или стиль не используйте в XML