eia os atributos mais recentes do tema na plataforma anteri
stou tentando ler valores de atributos de temas e estilos projetados para plataformas mais novas do que as que estou executando no meu aplicativ
Por favor, não pergunte o porquê. Se você conhece alguma coisa sobre as bibliotecas que escrevo, já deve saber que eu gosto de aprimorar os recursos da plataforma:)
Estou operando sob a suposição de que, quando os estilos do Android são compilados, as constantes de atributo são o que é usado para as chaves e, portanto, teoricamente deve ser capaz de ser lido em qualquer plataforma de alguma forma. É o que observei estar acontecendo com XMLs de layout em minhas outras bibliotecas sem problemas.
Aqui está um caso de teste básico que mostra o problema. Isso deve ser compilado usando o 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>
O fato de que isso usaandroid:actionBarStyle
especificamente é irrelevante. Tudo o que deve ser entendido é que é um atributo que estava disponível apenas a partir do Android 3.
Aqui está a maneira que eu tentei acessar esses valores até agora nas plataformas anterior ao 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);
Todos resultam neste erro no LogCat:
E/ResourceType(5618): Style contains key with bad entry: 0x010102ce
O0x010102ce
constant é o valor do atributo deandroid.R.attr.actionBarStyle
, o que parece indicar que a plataforma está rejeitando o atributo antes que eu possa ter a chance de acessar seu valo
Estou procurando qualquer outra maneira de ler atributos como este no Tema. Tenho certeza de que, depois de obter a referência de estilo, não terei problemas para ler seus atributo
Existe alguma maneira possível de fazer isso?