Читайте новые атрибуты темы на более старой платформе

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

Пожалуйста, не спрашивайте почему. Если вы знаете что-нибудь о библиотеках, которые я пишу, вы уже должны знать, что мне нравится использовать возможности платформы :)

Я работаю в предположении, что при компиляции стилей Android константы атрибутов - это то, что используется для ключей, и, следовательно, теоретически должно каким-то образом считываться на любой платформе. Это то, что я наблюдал, чтобы происходило с макетами XML в других моих библиотеках без проблем.

Вот базовый тестовый пример, который показывает проблему. Это должно быть скомпилировано с использованием Android 3.0+.

<resources>
    <style name="Theme.BreakMe">
        <item name="android:actionBarStyle">@style/Widget.BreakMe</item>
    </style>
    <style name="Widget.BreakMe" parent="android:Widget">
        <item name="android:padding">20dp</item>
    </style>
</resources>

Тот факт, что это используетandroid:actionBarStyle конкретно не имеет отношения к делу. Все, что следует понимать, это то, что это атрибут, который был доступен только начиная с Android 3.0.

Вот способ, которым я пытался получить доступ к этим значениям до сих пор на платформахдо Android 3.0.

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Break Me"
    style="?android:attr/actionBarStyle"
    />

а также

<declare-styleable name="Whatever">
    <item name="datStyle" format="reference" />
</declare-styleable>

<style name="Theme.BreakMe.Take2">
    <item name="datStyle">?android:attr/actionBarSize</item>
</style>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Break Me"
    style="?attr/datStyle"
    />

а также

TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.actionBarStyle, outValue, true);

а также

int[] Theme = new int[] { android.R.attr.actionBarSize };
int Theme_actionBarSize = 0;
TypedArray a = context.obtainStyledAttributes(attrs, Theme);
int ref = a.getResourceId(Theme_actionBarSize, 0);

а также

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ActionBar, android.R.attr.actionBarStyle, 0);

Все они приводят к этой ошибке в LogCat:

E/ResourceType(5618): Style contains key with bad entry: 0x010102ce

0x010102ce константа является значением атрибутаandroid.R.attr.actionBarStyle что, похоже, указывает на то, что платформа отклоняет атрибут, прежде чем я смогу получить доступ к его значению.

Я ищу любой другой способ прочитать атрибуты, подобные этому, в теме. Я вполне уверен, что как только я получу ссылку на стиль, у меня не будет проблем с чтением его атрибутов.

Есть ли какой-нибудь возможный способ сделать это?

Ответы на вопрос(3)

Ваш ответ на вопрос