Какова цель аргумента index в методе getColor() TypedArray?

#java #android #xml

#java #Android #xml

Вопрос:

У меня возникли проблемы с пониманием того, что аргумент index делает для метода getColor (). Что делает index и как я должен его использовать?

В моей текущей программе, если я оставлю для него некоторые значения, такие как 0, 1, 2, тогда цвет всегда будет белым, тогда как если я присвою ему значение, подобное 5, тогда это будет цвет, который я выбираю.

 //makes color white

TypedArray typedArray = obtainStyledAttributes(new int[]{R.attr.conversation_background});
int color = typedArray.getColor(1, Color.WHITE);
typedArray.recycle();

//makes color white

TypedArray typedArray = obtainStyledAttributes(new int[]{R.attr.conversation_background});
int color = typedArray.getColor(1, Color.RED);
typedArray.recycle();

//makes color white

TypedArray typedArray = obtainStyledAttributes(new int[]{R.attr.conversation_background});
int color = typedArray.getColor(5, Color.WHITE);
typedArray.recycle();

//makes color red

TypedArray typedArray = obtainStyledAttributes(new int[]{R.attr.conversation_background});
int color = typedArray.getColor(5, Color.RED);
typedArray.recycle();
  

Комментарии:

1. Пожалуйста, опубликуйте XML-файл, который использует ваш CustomView.

Ответ №1:

Просматривая код, он выглядит как «выбранный вами цвет», он же значение по умолчанию будет возвращено, если тип не найден в массиве. Итак, причина, по которой вы получаете красный цвет в вашем последнем примере, заключается в том, что он не смог найти ничего другого, что можно было бы вернуть для индекса атрибута, который вы ему дали (5).

  * @param index Index of attribute to retrieve.
 * @param defValue Value to return if the attribute is not defined or
 *                 not a resource.
  

https://android.googlesource.com/platform/frameworks/base.git/ /master/core/java/android/content/res/TypedArray.java

Ответ №2:

index аргумент getColor(int index, int default) соответствует индексу запрошенного атрибута во входном массиве.

Вы передаете только 1 элемент-массив в obtainStyledAttributes(int[]) поэтому вы должны получить желаемый цвет с помощью индекса 0 .