在android

时间:2015-08-17 10:02:54

标签: android android-fragments material-design

我有一个带有NavigationDrawer和工具栏的Activity。当我想要在滚动子片段视图之一时消失一个toobar时,我遇到了问题。一切正常,除了从底部出现一些与正在消失的工具栏完全相同的视图。

我制作了一个显示问题的GIF动画。由于我的声誉,我无法直接发布图片,但this gifthis gif显示问题

我试图找出它的来源。它似乎是我的容器FrameLayout,我的片段视图在运行时放置。我将其背景更改为绿色,以便我可以识别它。

<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <include
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_scrollFlags="scroll|enterAlways"
        layout="@layout/toolbar" />

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/darkGreen"
        tools:context="org.cddevlib.breathe.MainActivity" />
</LinearLayout>

<fragment
    android:id="@+id/navigation_drawer"
    android:name="org.cddevlib.breathe.NavigationDrawerFragment"
    android:layout_width="@dimen/navigation_drawer_width"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    tools:layout="@layout/fragment_navigation_drawer" /> </android.support.v4.widget.DrawerLayout>

这是包含的工具栏布局

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
  android:id="@+id/toolbar"
  android:layout_width="match_parent"
  android:layout_height="?attr/actionBarSize"
  app:layout_collapseMode="pin"
  app:layout_scrollFlags="scroll|enterAlways"
  android:fitsSystemWindows="true"
  app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
</android.support.v7.widget.Toolbar>

最后从片段视图中加载了片段:

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/black" >

   <include
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_scrollFlags="scroll|enterAlways"
    layout="@layout/toolbar" />

    <android.support.v4.widget.NestedScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:background="@color/white"
        android:fillViewport="true" >

        (...)

请注意,我在该布局中再次包含工具栏,因为我想通过隐藏/添加工具栏为我的应用程序中的每个片段添加不同的工具栏。

    toolbar = (Toolbar) ((View) vw).findViewById(R.id.toolbar);
            if (toolbar != null) {
                // // for crate home button
                activity = (AppCompatActivity) getActivity();
                activity.getSupportActionBar().hide();
                toolbar.setBackgroundDrawable(new ColorDrawable((ColorUtils.getColorDark(DataModule.getInstance()
                        .getMainActivity()))));
                activity.setSupportActionBar(toolbar);
                activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            }

所以多亏了sanat shukla,我的问题是我的问题是我在片段视图中使用了AppBarLayout太多了。在我的片段视图中,AppBarLayout是我所有组件的主要布局,但它不应该!它旨在保存工具栏内容!感谢

1 个答案:

答案 0 :(得分:0)

这不是问题。这是由android提供的酷炫动画和支持。当您使用工具栏的协调器布局时,它会在滚动列表时显示很酷的动画。

  

Design库将其提升到了一个新的水平:使用AppBarLayout   允许您的工具栏和其他视图(例如提供的标签)   TabLayout)响应标记为a的兄弟视图中的滚动事件   ScrollingViewBehavior

从这里阅读: http://android-developers.blogspot.in/2015/05/android-design-support-library.html

如果您不想隐藏工具栏,请不要使用协调器布局和appbar与工具栏。

尝试使用片段:

<android.support.design.widget.CoordinatorLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

     <! -- Your Scrollable View -->
    <android.support.v4.widget.NestedScrollView
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/scrollView1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:background="@color/white"
            android:fillViewport="true" >
    <android.support.v4.widget.NestedScrollView/>
    <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    <include
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|enterAlways"
            layout="@layout/toolbar" />
     </android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>