android - Material 设计 : Where to place elevation in 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>

问题是我在常规 styles.xml 文件中对 Widget.MyApp.Drawer 所做的任何更改都将被它完全覆盖。我想要的是将提升添加到我为 styles.xml 中列出的此样式的 v21 版本所做的样式更改列表的底部。

所以我着手创建基本样式,我在 View 中使用的样式继承自:

<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 中将样式留空,在 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>

在这种情况下,BaseItem 只是继承自 BaseListElement 的一种样式,BaseHeader 等样式也继承自它。如您所见,这有点荒谬。

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

1) 照原样继续,感觉自己像个白痴

2) 在 BaseListElement 级别上,创建一个带有一些愚蠢名称的子样式,这是我应用高度的点,然后(希望)将其滴落到所有子项。但是,一旦我在基础的 v21 子代之间有区别,这就不起作用了。

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

有什么想法吗?

最佳答案

要完成这样的事情,您只需在 styles.xmlsyles-v21.xml 中创建一个 BaseListElement.BaseItem一个没有海拔,第二个有海拔。然后只需从 BaseListElement.BaseItem 扩展 Widget.MyApp.ListItem,它应该在 v21 中更新以使用 elevation

样式.xml

<style name="BaseListElement.BaseItem">

</style>

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

</style>

样式-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>

关于android - Material 设计 : Where to place elevation in android styles?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28637209/

相关文章:

android - 设置Android Circle Progress Bar的粗细

android - 设置样式后不能点击按钮

android - 如何在 Android XML 中为文本添加下划线?

android - 在 android studio 2.3 中检索项目的父项时出错

android - 功能来知道是平板电脑,iPad,智能手机?

android - 使用 lambda 时出错,Kotlin

Android 推送主 Activity 的新实例?

android:关于使用缓存显示图片的一些疑惑

java.lang.VerifyError : Verifier rejected class on Lollipop when using release APK

android - 更新 gradle 依赖项后呈现问题