Jak mogę przechowywać kolory w tablicy array.xml i umieścić je z powrotem w tablicy Color []


Jak mogę przechowywać wartości kolorów w tablicy array.xml i przywrócić je do mojego kodu jako tablicę Color []?
Z góry dziękuję!
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli jest w array.xml:
<resources>
<array name="colors">
<item>#ffffff</item>
<item>#000000</item>
</array>
</resources>

To da ci wartości kolorów dla tej tablicy:
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();

To po prostu rozwija przykład TypedArray w dokumentacji:

http:// developer.android.com/manual/themes/resources/more-resources.html # TypedArray
http://developer.android.com/g ... Array
Mam nadzieję że to pomoże!
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

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

Kod klasy działalności.
String[] allColors = context.getResources().getStringArray(R.array.colors);Color.parseColor(allColors[0])// red
Color.parseColor(allColors[1])// green
Color.parseColor(allColors[2])// blue
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie mogę zostawić komentarza, więc muszę opublikować to jako nową odpowiedź. Całkowicie zgadzam się ze Sky Kelsey w.r.t. wybór projektu przy użyciu koloru, rodzaju zasobu. Okazało się jednak, że sugerowana metoda dostępu do nich nie działa. W ten sposób zaimplementowałem użycie tablicy XML, aby łatwo iterować po liście kolorów i stosować kolory do różnych (specjalnie pokolorowanych) reprezentacji.
Najpierw tablica w 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>

Następnie w 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>

Następnie użyj go:
TypedArray ta = res.obtainTypedArray(R.array.ingr_color_arr);
int colorToUse = ta.getResourceId(intGroupNum.intValue() - 1, R.color.recipe_detail_border);
paint.setColor(colorToUse);

Kluczem tutaj jest użycie

getResourceId

ponieważ setColor (int) będzie oczekiwał identyfikatora zasobu dla koloru. Otrzymałem komunikat „Nie znaleziono zasobu”, gdy próbowałem uzyskać wartość za pomocą funkcji
getIntArray ()
lub
getColor ()
.
Najpopularniejsza odpowiedź może zadziałać ... Nie próbowałem, ponieważ bardziej spodobał mi się wybór projektu „paleta kolorów”.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W Kotlinie będzie dużo łatwiej
val colors = resources.obtainTypedArray(R.array.colors).use { ta ->
IntArray(ta.length()) { ta.getColor(it, 0) }
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

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>

Plik activity.java
Context context;
String[] colors = context.getResources().getStringArray(R.array.listcolors); String bg_color = colors[i];//i=1,2,3...
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

<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>


Użyj tego w java/kotlin lub style nie używaj w xml
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zdefiniuj zasoby kolorów, a następnie dodaj je do tablicy, aby uzyskać do nich dostęp.
<?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>

Następnie uzyskaj do nich dostęp w ten sposób:
int[] rainbow = context.getResources().getIntArray(R.array.rainbow);for (int i = 0; i < tileColumns; i++) {
paint.setColor(rainbow[i]);
// Do something with the paint.
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli używasz tablicy liczb całkowitych, możesz pobrać kolor bezpośrednio
colors.xml
<color name="easy">#FF0000</color>
<color name="normal">#00FF00</color>
<color name="hard">#0000FF</color><integer-array name="colors_difficulty">
<item>@color/easy</item>
<item>@color/normal</item>
<item>@color/hard</item>
</integer-array>

kod
val colorsDif = resources.getIntArray(R.array.colors_dificulty);
view.setBackgroundColor(colorsDif[0])

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się