材质设计:在何处放置android样式中的立面?

材质设计:在何处放置android样式中的立面?,android,android-styles,Android,Android Styles,我想在我的一些应用程序样式中设置项目标高。现在高程只有21或更高,没有支持库,所以我自然倾向于创建一个styles-v21 xml并将其放在其中: <style name="Widget.MyApp.Drawer" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:elevation">4dp</item> </style> 4dp 问题是,我在re

我想在我的一些应用程序样式中设置项目标高。现在高程只有21或更高,没有支持库,所以我自然倾向于创建一个styles-v21 xml并将其放在其中:

<style name="Widget.MyApp.Drawer" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:elevation">4dp</item>
</style>

4dp
问题是,我在regular styles.xml文件中对Widget.MyApp.Drawer所做的任何更改都将被此文件完全覆盖。我想要的是将提升添加到我为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.ListItem">

</style>

@可绘制/列表项\u背景
@尺寸/列表项目高度
在styles.xml中,我将样式留空,在styles-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>

@可绘制/列表项\u背景
@尺寸/列表项目高度
@尺寸/列表项目填充
在本例中,BaseItem只是从BaseListElement继承的一种样式,BaseHeader等样式也从中继承。正如你所看到的,这有点荒谬

我是不是想得太多了?在我看来,我有3个选择:

1) 继续保持现状,感觉自己像个白痴

2) 在BaseListElement级别上,创建一个具有某个愚蠢名称的子样式,该名称就是我应用标高的点,然后(希望)该点将向下延伸到所有子样式。但是,只要我在基础的v21子级之间有差异,这就行不通了

3) 只需将
android:elevation
放入styles.xml文件(不要使用v21文件),并在元素上放置一个ignore标志。我这里只有5.0设备,所以目前无法轻松测试这是否会导致旧版本崩溃


有什么想法吗?

要完成类似的任务,您可以创建一个
样式.xml
syles-v21.xml
BaseListElement.BaseItem
,第一个没有高程,第二个有高程。然后只需从
BaseListElement.BaseItem
扩展
Widget.MyApp.ListItem
,它应该在v21中更新,以使用
提升

styles.xml

<style name="BaseListElement.BaseItem">

</style>

<style name="Widget.MyApp.ListItem" parent="@style/BaseListElement.BaseItem">

</style>

styles-v21.xml

<style name="BaseListElement.BaseItem">
    <item name="android:padding">@dimen/list_item_padding</item>
</style>

@尺寸/列表项目填充
方法3您可以安全地执行以下操作:

<item name="android:elevation" tools:ignore="NewApi">4dp</item>
4dp

你能在模拟器上测试3吗?Genymotion非常容易设置。