Android AppCompat 21海拔


76

有没有什么方法可以View在棒棒糖装之前的设备中增加高度,而无需将其包装在CardView


请参阅此处:android-developers.blogspot.in/2014/10/…他们对操作栏说的是getSupportActionBar()。setElevation(0)。因此,对您的卡片视图尝试相同的操作。
2014年

3
我不打算在上添加海拔CardView。我想将其添加到任何View可能的地方。
Eliezer 2014年

Answers:


78

ViewCompat.setElevation(View, int) 当前不产生垫片。

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

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

该reddit线程跟踪所述更新。

编辑

新的支持设计库实际上确实为浮动动作按钮创建了垫片。


2
这仍然无法正常工作吗?什么是“垫片” :)?
丹尼尔·威尔逊

6
@DanielWilson填充程序是一种解决方法(en.wikipedia.org/wiki/Shim_(computing))。由于影子在5.0是本机,你需要为<5.0垫片
德克-一月

非常有趣的谢谢:)希望工程师们不会在较旧的设备上放弃它。我宁愿自己不要这样做:D
Daniel Wilson

@DanielWilson实话实说:材料设计是5.0+一代产品的一部分。在棒棒糖之前食用它并没有真正意义上的“感觉”。我认为没有renderthread是不支持它的原因。
Derk-Jan 2014年

@ Derk-Jan不幸的是,即使您写了几个月,Android 5的市场份额仍不到2%
Greg Ennis

64

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

在此处输入图片说明

布局应为:

<RelativeLayout
    android:id="@+id/toolbar_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true" >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        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_width="match_parent"
        android:layout_height="@dimen/toolbar_shadow"
        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>

1
您能提供有关-android:layout_height =“ @ dimen / toolbar_shadow”的信息吗
Ranjith Kumar

2
它是阴影的大小,值越高,工具栏越“升高”
thiagolr

根据从Google设计网站中选取的值,endColor应该为#45000000。但是,这取决于获得价值的地方。
好奇的山姆

这样简单的解决方案。谢谢!
BK

48

我使用

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

我测试的输出:

在此处输入图片说明

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

更新:如果要更改此可绘制的颜色,请尝试@Irfan答案

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


1
我将此技巧用于RecyclerView适配器,效果很好。感谢分享!
Alberto Gaona 2015年

如何为AlertDialog执行此操作?我有一种应用于对话框的样式,因此我在其中添加了提到的属性,但看起来很奇怪。好像我已经添加了多个工作表/图层作为背景。有什么线索吗?
cgr

使用@android:drawable / dialog_holo_light_frame之类的系统资源很危险,不是吗?一些移动设备的生产者可以覆盖系统资源,因此在不同的设备上显示的资源可能不同,不是吗?
P. Ilyin

我利用这个资源2年多..但是,我没有得到任何的问题。它的工作在三星,华硕的Nexus,摩托。而联想也..
兰芝斯·库马尔·

-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_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|end"
            app:elevation="5dp">

对于视图,必须使用类似于“ android.support.v7.widget.AppCompatTextView”的
appcompact
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.