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

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

【问题讨论】:

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

标签: android android-view material-design


【解决方案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_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>

【讨论】:

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

我实现了同样的效果,

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

我的测试输出:

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

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

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

【讨论】:

  • for view 必须使用 appcompact like 'android.support.v7.widget.AppCompatTextView'
猜你喜欢
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 2018-10-03
  • 1970-01-01
  • 2012-04-11
  • 2011-09-13
  • 1970-01-01
相关资源
最近更新 更多