标签: android-elevation

更改CardView阴影颜色

这个问题在很多时候被问过,但我仍然找不到解决这个问题的好方法.

为什么我需要这样做?好吧,因为项目我和我的团队开发有iOS风格.

我尝试了什么?

  1. 9.pathch阴影生成器,但9.pathes本质上是pngs,它给了我没有灵活性,如果我将使用这种方法,我应该编辑边缘到处.
  2. 它支持自定义阴影的碳库,它们被绘制到视图边框之外,但是当库不为圆角绘制阴影时,存在关于圆角矩形的问题.
  3. 使用旧的CardView实现并覆盖其阴影颜色,但它被绘制在卡片边界内,因此它不是选项.

那么有没有办法改变CardView的阴影颜色,只需对所有布局文件进行最少的编辑,并在视图外部绘制阴影,就像原始的CardView一样?

android shadow android-view android-cardview android-elevation

22
推荐指数
4
解决办法
2万
查看次数

Android appbarlayout高程显示在状态栏中

如何摆脱状态栏中的高程?如果我在AppbarLayout中设置应用程序:提升到0dp,状态栏中不再出现提升,也不会低于AppbarLayout.

如何获得AppbarLayout下的高程?

这是我的意思截图:毛茸茸的链接,注意状态栏中的阴影:(

谢谢!

android appbar android-elevation android-appbarlayout

19
推荐指数
1
解决办法
4950
查看次数

如何在所有Android版本上显示支持库的ActionBar和工具栏的阴影?

这是一个简单的问题:

我使用新的支持库,它允许我拥有一个工具栏实例,甚至将其设置为活动的actionBar(或使用默认的).

如何自定义工具栏(或默认ActionBar)投射的阴影?

我试过使用"setElevation"(两者都有),但它似乎没有在Android Lollipop上做任何事情.

另外,我找不到如何在Lollipop前版本上自定义阴影.可能有这个API吗?或至少是一个drawable(我没有找到,即使我已经尝试过)?


好的,我已经设法找到了下一件事:

对于Lollipop和pre-Lollipop,当您的活动使用正常的AppCompat主题(例如"Theme.AppCompat.Light")时,阴影应该看起来很好.

但是,当您使用"setSupportActionBar"(并使用适当的主题,例如"Theme.AppCompat.Light.NoActionBar")时,您将遇到阴影的一些问题.

对于pre-Lollipop,你可以在工具栏下面放置一个FrameLayout,它看起来就像用于普通主题的那样,如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        android:foreground="?android:windowContentOverlay"
        android:visibility="@integer/action_bar_shadow_background_visibility" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        android:text="@string/hello_world" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

您可以使用FrameLayout作为活动的内容,或使用我所做的.您还可以通过为棒棒糖前置整数0和为棒棒糖及以上版本放置2来设置其可见性,就像我使用"action_bar_shadow_background_visibility"一样.

这是一个丑陋的解决方案,但它可以工作,但仅限于前Lollipop版本.

在任何情况下,如果我使用"setSupportActionBar",我仍然无法找到一种方法来为Lollipop显示阴影.我尝试在工具栏和操作栏上使用"setElevation"(在调用"setSupportActionBar"之后立即使用"getSupportActionBar").

我也没有得到如何获得动作栏的标准高度,因为我注意到许多教程说使用"minHeight"作为工具栏.非常感谢这方面的帮助.

谁能帮我这个?

再说一次,为了说清楚,这就是我的要求:

  • 对于Pre-Lollipop,显示在工具栏和ActionBar的支持库上使用的相同阴影.
  • 棒棒糖也一样(但是使用棒棒糖的那个)
  • 额外:在Lollipop上自定义阴影更加"精致"(也许可以在所有版本上自定义).
  • 额外:为什么工具栏的minHeight获取操作栏高度的值,而不是高度本身?

编辑:好的,到目前为止,这是模仿Lollipop的影子:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

    <include
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        layout="@layout/toolbar_action_bar_shadow" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        android:text="@string/hello_world" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

RES /布局/ …

android android-actionbar android-support-library android-elevation

15
推荐指数
1
解决办法
2万
查看次数

按主题更改ActionBar的提升高度

我想删除ActionBar下方的阴影.

我知道我需要将高程更改为0dp,但我想在主题中执行此操作.

对于Android 4.4-我使用: <item name="android:windowContentOverlay">@null</item>

但Android 5.0有可能吗?

android android-actionbar android-5.0-lollipop android-elevation

15
推荐指数
1
解决办法
2万
查看次数

关于Android的澄清"属性提升仅用于API级别21及更高级别"

我是开发Android的新手,并且在不同平台上开发的概念在每个平台上都有不同的支持功能,这真的让我很头疼.

例如,如果我进入xml文件并进行设置

   android:elevation="10dp"
Run Code Online (Sandbox Code Playgroud)

并且它给我的消息"属性提升仅用于API级别21及更高级别(当前最小值为14),并且说它将简单地忽略该属性.这是说它即使我使用它也会完全忽略它一个棒棒糖设备,或者如果我不在Lollipop设备上它只会忽略它?

android android-studio material-design android-5.0-lollipop android-elevation

15
推荐指数
1
解决办法
5697
查看次数

如何在cardview前面引入imageView?当两者都是相对布局的孩子

我有一个布局XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/containor"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff6da"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.vats.vatishs.cardviewprogrammatically.MainActivity">

        <FrameLayout
            android:id="@+id/card"
            android:layout_width="220dp"
            android:layout_marginTop="10dp"
            android:layout_height="wrap_content">

            <TextView
                android:background="@color/white"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:padding="10dp"
                android:text="Hello I am a text View." />

        </FrameLayout>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="210dp"
        android:background="@drawable/select_delete_chim" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.结果将是框架布局上方的图像视图,但是当我使用下面的xml时,我用CardView替换了框架布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/containor"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff6da"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.vats.vatishs.cardviewprogrammatically.MainActivity">

        <android.support.v7.widget.CardView
            android:id="@+id/card"
            android:layout_width="220dp"
            android:layout_marginTop="10dp"
            android:layout_height="wrap_content">

            <TextView
                android:background="@color/white"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:padding="10dp"
                android:text="Hello I am a text View." />

        </android.support.v7.widget.CardView>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="210dp"
        android:background="@drawable/select_delete_chim" …
Run Code Online (Sandbox Code Playgroud)

android android-cardview android-elevation

15
推荐指数
2
解决办法
1万
查看次数

凹凸轮廓上的棒棒糖高程

我有一个自定义视图,通过使用路径显示星形.此视图按预期工作,但现在我想将其实现转移到新的Google Material建议.

不幸的是elevation取决于凸起的轮廓,我还没有找到解决方案.

您是否知道任何已知的变通方法或任何其他创造性解决方案?

在此输入图像描述

这是我的凹路径:

    double outerSize = w / 2;
    double innerSize = w / 5;
    double delta = 2.0*Math.PI/5.0;
    double rotation = Math.toRadians(-90);
    double xpos = w/2.0;
    double ypos = h/2.0;
    mPath = new Path();

    mPath.moveTo((float)(outerSize * Math.cos(delta + rotation) + xpos),
                 (float)(outerSize * Math.sin(delta + rotation) + ypos));

    for(int point= 0;point<6;point++)
    {
        mPath.lineTo((float) (innerSize * Math.cos(delta * (point + 0.5) + rotation) + xpos),
                (float) (innerSize * Math.sin(delta * (point + 0.5) + rotation) + …
Run Code Online (Sandbox Code Playgroud)

android android-custom-view material-design android-5.0-lollipop android-elevation

14
推荐指数
1
解决办法
1130
查看次数

Android ScrollView剪辑子高程阴影

正如标题所述,我正在尝试将一个CardView放在ScrollView中,但是CardView高程阴影正在被它的父母关闭...

这是布局XML:

<FrameLayout
    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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".TestScrollViewActivity">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="128dp"
        android:background="?colorPrimary"
        android:gravity="bottom"
        android:minHeight="?actionBarSize"/>

    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal"
        android:clipToPadding="false"
        android:paddingBottom="40dp"
        android:paddingTop="60dp">

        <android.support.v7.widget.CardView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:elevation="4dp"
            app:cardBackgroundColor="@android:color/white"
            app:cardCornerRadius="0dp">

            <LinearLayout
                android:layout_width="400dp"
                android:layout_height="600dp"
                android:orientation="vertical">

            </LinearLayout>

        </android.support.v7.widget.CardView>

    </ScrollView>

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

我找到的唯一解决方法是向父ScrollView添加填充或向子CardView添加边距...

有没有选项可以防止这种情况发生而不使用填充/边距?

谢谢.

编辑:

这就是布局在没有在父滚动视图上设置填充的情况下的样子,因为可以看到,左右阴影被切断: 孩子的侧影被父滚动视图切断

现在,如果将填充添加到父滚动视图侧,则可以正确绘制阴影,如下所示: 在向scrollview的右侧和左侧添加填充后,现在正确显示了孩子的侧影

所以,我的主要问题是这是实现这一目标的唯一方法吗?或者父视图上有一个标记或配置,可以正确绘制它的子视图?

android android-scrollview android-elevation

14
推荐指数
2
解决办法
1万
查看次数

如何将底部阴影添加到选项卡布局

嗨,我需要在我的标签布局下添加阴影(如在Skype中).

shadow_skype

我的活动xml:

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v7.widget.Toolbar xmlns:local="http://schemas.android.com/apk/res-auto"
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        android:background="@color/splashGreenTop"
        local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_below="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:elevation="0dp"
        android:minHeight="?attr/actionBarSize" />
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_below="@+id/tab_layout"
        android:id="@+id/tabContainer"
        android:layout_height="match_parent" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

当我添加android:elevation="10dp"到Tablayout时,阴影被添加到底部和顶部..我只需要底部.见图片......

在此输入图像描述

我怎样才能做到这一点 ?提前致谢.

xml android toolbar shadow android-elevation

14
推荐指数
3
解决办法
2万
查看次数

具有相同高度的两个视图并排

我有两个相同高度的视图.我想要的行为是,他们不会在彼此之间投下阴影,因为他们有相同的高度,然而,正在发生的是左边的视图,在右边投下阴影.它们的大小不同,因此我无法将它们放在另一个视图中并对该视图应用高程.

这是预期的行为吗?有没有办法围绕它?

编辑:

我只是用简单的视图重新创建,这里是代码.我也注意到它有预期的行为,如果我直接在布局中有视图,并且不包括它,因为我在这个例子中做了它,因为我需要它工作.

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:background="@android:color/holo_green_dark">

    <LinearLayout
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="@android:color/holo_red_dark"
        android:elevation="24dp"/>

    <include layout="@layout/test"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

以下是包括:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@android:color/holo_red_dark"
        android:elevation="24dp"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

截图:

android android-layout android-view android-elevation

12
推荐指数
1
解决办法
921
查看次数