在TabBar下面添加阴影 - Material Design

时间:2014-12-11 16:13:41

标签: android android-layout material

我有一个操作栏和标签栏。我用

删除了操作栏下面的阴影
<item name="android:windowContentOverlay">@null</item>

虽然,我想在标签栏下添加阴影。我正在使用SlidingTabLayout。我的标签TextView:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabText"
android:layout_width="wrap_content"
android:layout_height="@dimen/actionbar_height"
android:textColor="@color/tab_color"
android:gravity="center"
android:textAllCaps="true"
android:singleLine="true" />

怎么做?

4 个答案:

答案 0 :(得分:21)

jmols回答结果与Google应用(例如Play报亭)使用的阴影不同。这是我的方法,它使阴影看起来与Play报亭完全相同:

创建一个名为shadow.xml的drawable:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:startColor="@android:color/transparent"
        android:endColor="#33000000"
        android:angle="90">
    </gradient>
</shape>

然后,将该阴影设置为您的内容布局,例如:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <!-- Your views here -->
    <View
        android:layout_width="match_parent"
        android:layout_height="8dp"
        android:background="@drawable/shadow" />
</RelativeLayout>

放置在工具栏/操作栏下方,这与Play报亭和Play商店中的实现完全相同。

答案 1 :(得分:3)

目前仅在Api级别21上支持阴影(因为它们是实时渲染的),并且不幸的是,支持库不提供阴影。

因此,你必须使用api级别的自定义drawable来模仿阴影&lt; 21。 最简单的方法是:

  • 从Google IO应用中获取shadow 9-patch
  • 将阴影设置为主要内容布局,例如:

    <RelativeLayout
        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">
    
        <Toolbar
            android:id="@+id/tb_toolbar"
            android:layout_width="match_parent"
            android:layout_height="@dimen/abc_action_bar_default_height_material"
            android:title="@string/toolbar_title"
            android:elevation="@dimen/toolbar_elevation"/>
    
        <FrameLayout
            android:id="@+id/fl_fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/tb_toolbar"
            android:foreground="@drawable/bottom_shadow"/>
    </RelativeLayout>
    

注意:唯一值得注意的例外是CardView,这个版本确实在较旧的api级别上投下了自己的影子。

有关详细信息,请查看this post

答案 2 :(得分:1)

如果您使用的是Android Material Design,要在视图中添加阴影,您需要在布局中指定android:elevation属性或在代码中调用myView.setElevation()方法。您可以在android documentation

中使用材质设计更多地定义阴影

答案 3 :(得分:0)

只需将海拔高度添加到Tablayout(0dp-25dp)中即可。阅读材质设计guidelines,以获取有关高程的更多信息。

android:elevation="10dp"

以下示例:

<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:elevation="10dp" />
<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:minHeight="?attr/actionBarSize" 
    android:elevation="10dp"/>

相同的问题:Link

请注意,如果清单中包含以下行,则阴影将不会显示:

android:hardwareAccelerated="false"

还有另一个链接:Link