Я пытаюсь получить несколько атрибутов стиля пространства имен android
из моего кода. Здесь я прилагаю соответствующий экстракт. AttributeSet attrs
- это параметр, который передается любому производителю TextView
.Получить несколько атрибутов стиля с помощью getStyledAttributes
private static final int[] ATTRS = new int[] { android.R.attr.textSize,
android.R.attr.text, android.R.attr.textColor,
android.R.attr.gravity };
private void processAndroidAttributes(final Context context,
final AttributeSet attrs) {
final TypedArray a = context.obtainStyledAttributes(attrs, ATTRS);
try {
final String text = a.getString(1);
myTextView.setText(text);
final float textSize = a.getDimensionPixelSize(0, DEFAULT_TEXT_SIZE);
myTextView.setTextSize(textSize);
}
Моя проблема заключается в том, что я хочу, чтобы читать 4 атрибутов, описанных в int[]
ATTRS
. Как вы видите, я поставил textSize
в качестве первого элемента этого массива. Причина этого проста: если я поменял ее на второе место в массиве, ее значение не читается правильно (вместо этого загружается заданное значение по умолчанию). С другой стороны, текст правильно загружается в зависимости от того, какое положение находится в массиве ATTRS
. Я не смею экспериментировать с позиционными настройками gravity
и textColor
, но с этой перестановкой они не работают.
Может ли кто-нибудь объяснить, почему мы играем поведение при получении attrbutes?
Интересно, что я пришел к такому же выводу. Странно, что это поведение не документировано или не описано в другом месте. – miha