如何在没有阴影的情况下在AppBar下添加TabView

时间:2015-11-24 19:58:03

标签: android material-design android-tablayout android-appbarlayout

在我的应用程序中,我遇到了一个问题,我希望从导航抽屉中进行高级导航控制,并在片段内的TabLayout中进行页面级控制。然而,这会导致从AppBar到片段的阴影渲染问题。

This is the look I want

This is the look I have

这是我的布局和代码的基础知识。在根部我有这个简单的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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" android:fitsSystemWindows="true"
    tools:context=".MainAppActivity">

    <android.support.design.widget.AppBarLayout android:layout_height="wrap_content"
        android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar android:id="@+id/toolbar"
            android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

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

</android.support.design.widget.CoordinatorLayout>

当我的导航抽屉被选中时,我将片段膨胀到&#34; content_main&#34;

    this.getSupportFragmentManager()
            .beginTransaction()
            .addToBackStack(tag)
            .replace(R.id.content_main_layout, fragment, tag)
            .commit();

放入 content_main 的片段包含我的TabView和视图寻呼机的布局:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_github_issues"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <android.support.design.widget.TabLayout
        android:id="@+id/github_issues_tab_layout"
        android:layout_height="?attr/actionBarSize"
        android:layout_width="match_parent"
        android:layout_gravity="top"
        android:background="?attr/colorPrimary"
        android:theme="@style/AppTheme.AppBarOverlay"/>
    <android.support.v4.view.ViewPager
        android:id="@+id/github_issues_viewpager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
</LinearLayout>

解决问题的最佳做法是什么?包含TabLayout是否存在于顶级AppBar中,并且只是基于页面禁用视图是否可接受的实现?

1 个答案:

答案 0 :(得分:1)

首先,您需要将视图层次结构更改为以下内容:

FrameLayout
  -CoordinatorLayout -> content
  -Toolbar

Toolbar高程修正为与AppBarLayout完全相同,也可以去掉阴影,但保留Toolbar的z顺序:

int appBarLayoutElevation = ViewCompat.getElevation(mAppBarLayout);
getActivity().getSupportActionBar().setElevation(appBarLayout);

类似的例子我在my blog post工作过。