Android AppCompat 21 海拔高度

Posted

技术标签:

【中文标题】Android AppCompat 21 海拔高度【英文标题】:Android AppCompat 21 Elevation 【发布时间】:2014-12-30 22:55:15 【问题描述】:

有没有办法在棒棒糖之前的设备中为View 添加提升而不将它们包装在CardView 中?

【问题讨论】:

请参阅此处:android-developers.blogspot.in/2014/10/… 他们已将操作栏称为 getSupportActionBar().setElevation(0)。因此,请为您的卡片视图尝试相同的操作。 我不想为CardView 添加海拔。如果可能,我想将其添加到任何View 【参考方案1】:

ViewCompat.setElevation(View, int) 目前不创建垫片。

目前模拟高程的唯一方法是在 v21 之前应用阴影。在values 中定义您的样式/布局/drawable 并在values-v21 中覆盖它。对于按钮,我使用样式覆盖。对于布局,我通常会使用引用覆盖(使用@null 来摆脱可绘制对象)。

希望将来支持库的更新会添加垫片。

This reddit thread 跟踪所述更新。

编辑

新的support design library 实际上确实为浮动操作按钮创建了垫片。

【讨论】:

这还是不行吗? '垫片'到底是什么:)? @DanielWilson 垫片是一种解决方法 (en.wikipedia.org/wiki/Shim_(computing))。由于阴影在 5.0 中是原生的,因此您需要一个用于 的 shim 非常有趣,谢谢 :) 希望工程师们不会因为旧设备而放弃它。我宁愿自己不做:D @DanielWilson 老实说:Material Design 是 5.0+ 一代的一部分。在棒棒糖之前吃它并没有真正的“意义”。我认为没有渲染线程是它不受支持的原因。 @Derk-Jan 不幸的是,Android 5 的市场份额在你写完几个月后仍然 【参考方案2】:

这是一个示例,如何在棒棒糖之前的设备上的 Toolbar 下方添加阴影:

布局应该是这样的:

<RelativeLayout
    android:id="@+id/toolbar_container"
    android:layout_
    android:layout_
    android:layout_alignParentTop="true" >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_
        android:layout_
        android:layout_alignParentTop="true"
        android:animateLayoutChanges="true"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

    <View
        android:id="@+id/toolbar_shadow"
        android:layout_
        android:layout_
        android:layout_below="@id/toolbar"
        android:background="@drawable/toolbar_dropshadow" />
</RelativeLayout>

而影子是:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <gradient
        android:angle="90"
        android:endColor="#88444444"
        android:startColor="@android:color/transparent" />

</shape>

【讨论】:

你能提供关于 - android:layout_ 的信息 它是阴影的大小,值越大,工具栏越“提升” 根据从谷歌设计网站挑选的值,endColor 应该是#45000000。但是,这取决于价值在哪里获得。 这样一个简单的解决方案。谢谢!【参考方案3】:

我实现了同样的效果,

  android:background="@android:drawable/dialog_holo_light_frame"

我的测试输出:

参考 - https://***.com/a/25683148/3879847

更新:如果您想更改此可绘制对象的颜色,请尝试@Irfan 回答

https://***.com/a/40815944/3879847

【讨论】:

我将这个技巧用于 RecyclerView 适配器并且效果很好。感谢分享! 如何为 AlertDialog 执行此操作?我有一个应用于对话框的样式,所以我在那里添加了提到的属性,但它看起来很奇怪。看起来好像我添加了多个工作表/图层作为背景。有什么线索吗? 使用像@android:drawable/dialog_holo_light_frame 这样的系统资源很危险,不是吗?一些移动设备的生产者可以覆盖系统资源,所以这些资源在不同的设备上可能会显示不同,不是吗? 我使用这个资源超过 2 年了.. 不过,我没有遇到任何问题.. 它在三星、华硕、Nexus、moto .. 和联想也有效..【参考方案4】:

您现在可以使用架构 xmlns:app="http://schemas.android.com/apk/res-auto"app:elevation

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools">
...

<LinearLayout
            android:layout_
            android:layout_
            android:layout_gravity="bottom|end"
            app:elevation="5dp">

【讨论】:

for view 必须使用 appcompact like 'android.support.v7.widget.AppCompatTextView'

以上是关于Android AppCompat 21 海拔高度的主要内容,如果未能解决你的问题,请参考以下文章

高度始终为 0。我无法获得海拔高度

没有高度的 AppCompat 按钮

appcompat-v7:21.0.0':找不到与给定名称匹配的资源:attr 'android:actionModeShareDrawable'

在 Appcompat 21 中更改工具栏颜色

缺少来自android appcompat v7-21.0.0的样式

来自 Google Play Services Fused Location Provider 的海拔高度