Я хочу установить элемент в некоторых стилях моего приложения. Сейчас высота составляет только 21 и выше, без библиотеки поддержки, так что моя естественная склонность было просто создать стили-V21 XML и поместить его туда:Дизайн материалов: Где разместить высоту в стилях андроида?
<style name="Widget.MyApp.Drawer" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:elevation">4dp</item>
</style>
Проблема с этим какие-либо изменения, которые я делаю в виджете. MyApp.Drawer в регулярном файле styles.xml будет полностью перезаписан. Я бы хотел, чтобы высота была просто привязана к нижней части списка изменений стиля, которые я сделал для версии этого стиля v21, указанной в styles.xml.
Так что я взял на создание базовых стилей, стиль я использую в представлениях унаследованы от:
<style name="BaseListElement">
<item name="android:background">@drawable/listitem_background</item>
<item name="android:layout_height">@dimen/list_item_height</item>
</style>
<style name="BaseListElement.ListItem">
</style>
Я оставляю стиль пустого в styles.xml, и в стилях-v21, добавить высоту и его работает.
Однако вид Получить по хитрым, когда я хочу использовать некоторые стили:
<style name="BaseListElement">
<item name="android:background">@drawable/listitem_background</item>
<item name="android:layout_height">@dimen/list_item_height</item>
</style>
<style name="BaseListElement.BaseItem">
<item name="android:padding">@dimen/list_item_padding</item>
</style>
<style name="Widget.MyApp.ListItem" parent="@style/BaseListElement.BaseItem">
</style>
<style name="BaseListElement.BaseHeader">
</style>
В этом случае BaseItem только один стиль, который наследует от BaseListElement, стили, такие как BaseHeader наследовать от него, а также. Это становится нелепым, как вы можете видеть.
Я переусердствовал это? Как я вижу это у меня есть 3 варианта здесь:
1) Продолжить как есть и чувствовать себя как идиот
2) На уровне BaseListElement, создать дочерний стиль с каким-то бестолковым именем, которое является точкой, в которой Я применяю высоту, которая затем (надеюсь) просачивалась бы ко всем детям. Как только у меня есть разница между v21 детьми базы, это не сработает.
3) Просто выбросьте android:elevation
в файл styles.xml (не используйте файл v21) и поместите на элемент флаг игнорирования. У меня только 5,0 устройств здесь, поэтому я не могу легко проверить на данный момент, если это приведет к сбою в старых версиях.
Любые мысли?
вы можете проверить 3 на эмуляторе? Genymotion очень прост в настройке. –