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 海拔高度的主要内容,如果未能解决你的问题,请参考以下文章
appcompat-v7:21.0.0':找不到与给定名称匹配的资源:attr 'android:actionModeShareDrawable'