Как я использую obtainStyledAttributes (интервал []) с внутренними Темами Android

Таким образом, я озирался и узнал это android.R.styleable больше не часть SDK даже при том, что это все еще документируется здесь.

Это действительно не было бы проблемой, если бы она была ясно зарегистрирована, какова альтернатива. Например, Календарное Приложение AOSP все еще использует android.R.styleable

// Get the dim amount from the theme   
TypedArray a = obtainStyledAttributes(com.android.internal.R.styleable.Theme);
lp.dimAmount = a.getFloat(android.R.styleable.Theme_backgroundDimAmount, 0.5f);
a.recycle();

Таким образом, как можно было бы добраться backgroundDimAmount не добираясь int[] от android.R.styleable.Theme?

Во что я должен вонзиться obtainStyledAttributes(int []) чтобы заставить его работать с SDK?

19
задан Rahul Sharma 10 January 2018 в 09:34
поделиться

2 ответа

Demo CustomView API показывает, как получить атрибуты в стиле. Код для представления здесь:

https://github.com/android/platform_development/blob/master/sample/apidemos/src/com/example/android/apis/view/labelview.java

Стильный массив, используемый для извлечения текста, цвета и размера, определен в разделе , здесь:

https://github.com/android/platform_development/blob/master/samples /ApidemoS/RES/Values/attrs.xml#l24

you можно использовать , чтобы определить любой список атрибутов, которые вы хотите получить в группу, содержащую свои собственные и те определяется платформой.

Что касается этих вещей в документации, вокруг стильных массивов есть много Java Doc, которое позволяет им полезно иметь в документации, поэтому они были там оставлены. Однако в качестве изменений массивов, таких как добавляемые новые атрибуты, значения констант могут измениться, поэтому на платформе нельзя быть в SDK (и, пожалуйста, используйте какие-либо трюки, чтобы попытаться получить доступ к ним). Не должно быть не нужно использовать платформу в любом случае, потому что они каждая из них только для реализации частей структуры, и это тривиально создавать свои собственные, как показано здесь.

13
ответ дан 30 November 2019 в 03:24
поделиться

Это, кажется, ошибка в SDK. Я подал проблему , что вы можете захотеть звездочку, чтобы получать обновления на нем.

В качестве оборота вы можете использовать отражение для доступа к полю:

Class clazz=Class.forName("android.R$styleable");
int i=clazz.getField("Theme_backgroundDimAmount").getInt(clazz);
4
ответ дан 30 November 2019 в 03:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: