2016-02-23 87 views
42

我有一個CoordinatorLayout其中包含AppBarLayoutFrameLayout其中包含片段。修復協調員佈局中的底欄

其中一個片段在頂部包含TabLayout,一個列表槽位RecyclerView,底部有一個「自制」工具欄。

AppBarLayout配置了app:layout_scrollFlags="scroll|enterAlways"

我的問題是,無論是「工具欄」是隱藏在滾動時,AppBarLayout並在底部我的「自制」工具欄。這是當前的行爲

enter image description here

我想修復底部的「自制」工具欄保持可見的,但我不能達到它。

這是片段佈局的XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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" 
    android:orientation="vertical" 
    > 
    <android.support.design.widget.TabLayout 
     android:id="@+id/toolbarfilter" 
     android:layout_width="match_parent" 
     android:background="@color/azul_asde" 
     app:tabMode="fixed" 
     app:tabMaxWidth="0dp" 
     android:elevation="4dp" 
     app:tabIndicatorColor="@color/verde_pastel" 
     android:layout_height="wrap_content" 
     /> 

    <android.support.v4.widget.SwipeRefreshLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/swipeContainer" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 

    <android.support.v7.widget.RecyclerView 
    android:id="@+id/list" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 
    </android.support.v4.widget.SwipeRefreshLayout> 

     <LinearLayout 
     android:id="@+id/toolbarselection" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:paddingTop="10dp" 
     android:paddingBottom="10dp" 
     android:background="@color/azul_asde" 
     android:elevation="4dp" 
     android:visibility="visible" 
     > 
     <ImageView 
      android:id="@+id/delete" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:src="@drawable/ic_delete_white_24dp" 
      android:tint="@color/gris_desactivado" /> 
     <ImageView 
      android:id="@+id/select" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:src="@drawable/ic_bookmark_border_white_24dp"/> 

     <ImageView 
      android:id="@+id/send" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:src="@drawable/ic_send_white_24dp" 
      android:tint="@color/gris_desactivado" /> 

    </LinearLayout> 

</LinearLayout> 

EDIT1:THIS問題似乎是同樣的問題。

+0

你能幫我一個忙,告訴我們你是如何隱藏底欄?我似乎無法弄清楚...(我不需要頂部欄,只是底部) – AndreiBogdan

+1

嗨Hanzo, 您是否找到解決此問題的解決方案? – Sharath

+0

你可以發佈你的XML文件,其中包含'CoordinatorLayout' –

回答

1

當從屬視圖(RecyclerView,NestedScrollView)中的滾動內容小於視圖高度時,此行爲基本上從AppBarLayout中刪除滾動標誌SCROLL。當不需要滾動時。它也覆蓋抵消滾動視圖,通常由AppBarLayout.ScrollingViewBehavior完成。當添加頁腳時,即。按鈕,滾動視圖或ViewPager,其中每個頁面的內容長度可能不同。

https://gist.github.com/MaciejKaras/02bff315f00b87d80467a470424f22c3

已經回答https://stackoverflow.com/a/37293634

1

要解決底吧,首先你必須在那裏標籤目前使用的活動。在那個活動中使用不同的片段。添加您tabLayout在這個activity_main_tab.xml

activity_main_tab.xml

<?xml version="1.0" encoding="utf-8"?> 
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     xmlns:local="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/co_activity_root_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true"> 

      <android.support.design.widget.AppBarLayout 
       local:theme="@style/Theme.AppBarOverlay" 
       android:id="@+id/toolbar_layout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_alignParentTop="true"> 

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

      <RelativeLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_below="@+id/toolbar_layout"> 

       <FrameLayout 
        android:id="@+id/fl_fragment_container" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        /> 
      </RelativeLayout> 
     </RelativeLayout> 

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

對於片段視圖使用

fragment_tab.xml

在這裏使用的應用程序:layout_scrollFlags = 「滾動| enterAlways」 工具欄使其可滾動

<?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" 
     android:id="@+id/coordinator" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <android.support.design.widget.AppBarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:background="?attr/colorPrimary" 
       app:layout_scrollFlags="scroll|enterAlways"/> 

      <android.support.design.widget.TabLayout 
       android:id="@+id/tablayout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       app:tabIndicatorColor="@color/white" 
       app:tabIndicatorHeight="@dimen/profile_tablayout_indicator_height" 
       android:background="?attr/colorPrimary" 
       app:tabGravity="fill"/> 

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

     <android.support.v4.view.ViewPager 
      android:id="@+id/viewpager" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

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

Fragment Tabs.java

public class FragmentTabs extends BaseFragment{ 

     private View rootView; 
     private ViewPager viewPager; 
     private TabLayout tabLayout; 
     private Toolbar toolbar; 
     private ViewPagerAdapter viewPagerAdapter; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup viewGroupContainer, Bundle savedInstanceState) { 
      rootViewSearch = inflater.inflate(R.layout.fragment_tab, viewGroupContainer, false); 
      initializeLayout(); 
      setUpActionBar(); 
      setUpFragmentObjects(); 

      return rootView; 
     } 


     private void initializeLayout() { 
      toolbar = (Toolbar) rootView.findViewById(R.id.toolbar); 
      viewPager = (ViewPager) rootView.findViewById(R.id.viewpager); 
      tabLayout = (TabLayout) rootView.findViewById(R.id.tablayout); 
     } 


     private void setUpActionBar() { 
      getApplicationContext().setSupportActionBar(toolbarSearch); 
      ActionBar actionBar = getApplicationContext().getSupportActionBar(); 
      if(actionBar != null){ 
       actionBar.setTitle(Constants.BLANK); 
      } 
     } 


     private void setUpFragmentObjects() { 
      viewPagerAdapter = new ViewPagerAdapter(getApplicationContext(), getChildFragmentManager()); 
      viewPager.setAdapter(searchViewPagerAdapter); 
      tabLayout.setupWithViewPager(viewPager); 
     } 
    } 

ViewPagerAdapter.java

public class ViewPagerAdapter extends FragmentPagerAdapter { 

    public ViewPagerAdapter(Activity activity, FragmentManager fragmentManager) { 
     super(fragmentManager); 
    } 


    @Override 
    public Fragment getItem(int position) { 
     Bundle bundle; 
     switch (position) { 
      case 0: // For Tab 1 
       // use fragment for tab 1 
       return fragment1; 
      case 1: // For Tab 2 
       // use fragment for tab 2 
       return fragment2; 
      case 2: // For Tab 3 
       // use fragment for tab 3 
       return fragment3; 
      default: 
       return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     return 3; // no. of Tabs 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: // Title For Tab1 
       return "Tab1"; 
      case 1: // Title For Tab2 
       return "Tab2"; 
      case 2: // Title For Tab3 
       return "Tab3"; 
      default: 
       return null; 
     } 
    } 
} 
1

您可以嘗試,並添加工具欄YOUT像這樣的collapseMode。

你appBarLayout似乎罰款

我勸u到看看這個鏈接: https://github.com/codepath/android_guides/wiki/Handling-Scrolls-with-CoordinatorLayout `

<android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsing_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@android:color/holo_blue_light" 
     android:fitsSystemWindows="true" 
     app:expandedTitleMarginEnd="64dp" 
     app:expandedTitleMarginStart="48dp" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      app:layout_collapseMode="pin" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|enterAlways"/> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tablayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabIndicatorColor="@color/white" 
      app:tabIndicatorHeight="@dimen/profile_tablayout_indicator_height" 
      android:background="?attr/colorPrimary" 
      app:tabGravity="fill"/> 

    </android.support.design.widget.CollapsingToolbarLayout> 
1

我面臨同樣的問題,這是對我來說

刪除的工作方式AppBarLayoutlayout_behavior所以它固定在上面。將FrameLayout layout_behavior定義爲app:layout_behavior="@string/appbar_scrolling_view_behavior",因此它調整FrameLayout低於AppBarLayout。通過這種方式您的框架佈局的內容將滾動,而不是工具欄。 CoordinatorLayout佈局類似如下

<?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="com.next_tech.teebox.GridView"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:titleTextColor="@android:color/white" /> 

    </android.support.design.widget.AppBarLayout> 
<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 


</FrameLayout> 


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

這是你的片段佈局的XML在您recyclerView滾動,而不會影響您的TabLayout和底部的線性佈局。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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" 
    android:orientation="vertical" 
    > 
    <android.support.design.widget.TabLayout 
     android:id="@+id/toolbarfilter" 
     android:layout_width="match_parent" 
     android:background="@color/colorPrimary" 
     app:tabMode="fixed" 
     app:tabMaxWidth="0dp" 
     android:elevation="4dp" 
     app:tabIndicatorColor="@color/btnBackground" 
     android:layout_height="?android:actionBarSize" 
     /> 

    <android.support.v4.widget.SwipeRefreshLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/swipeContainer" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"/> 
    </android.support.v4.widget.SwipeRefreshLayout> 

    <LinearLayout 
     android:id="@+id/toolbarselection" 
     android:layout_width="match_parent" 
     android:layout_height="?android:actionBarSize" 
     android:orientation="horizontal" 
     android:background="@color/colorPrimary" 
     android:layout_gravity="bottom" 
     android:elevation="4dp" 
     android:visibility="visible" 
     > 
     <ImageView 
      android:id="@+id/delete" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:layout_gravity="center" 
      app:srcCompat="@android:drawable/ic_menu_delete" /> 
     <ImageView 
      android:id="@+id/select" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_weight="1" 
      app:srcCompat="@drawable/white_arrow" /> 

     <ImageView 
      android:id="@+id/send" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:layout_gravity="center" 
      app:srcCompat="@drawable/ic_send_holo_dark" /> 

    </LinearLayout> 

</LinearLayout> 

我希望它可以幫助別人的感謝

更多信息 - Scrolling Behavior for Appbars in Android

1

你不能在coordinatorlayout做到這一點。所以使用的RelativeLayout和設計自己的佈局

4

內試試這個佈局:

<?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:id="@+id/container"> 

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@+id/bottom_navigation" 
     android:layout_alignParentTop="true"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 
     <android.support.v7.widget.CardView 
      xmlns:card_view="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/card_view" 
      android:layout_width="match_parent" 
      android:layout_margin="10dp" 
      android:layout_height="110dp" 
      android:padding="15dp" 
      card_view:cardElevation="2dp" 
      card_view:cardCornerRadius="4dp"> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:text="Test" /> 

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


     <android.support.v7.widget.CardView 
      xmlns:card_view="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/card_view1" 
      android:layout_width="match_parent" 
      android:layout_margin="10dp" 
      android:layout_height="110dp" 
      android:padding="15dp" 
      card_view:cardElevation="2dp" 
      card_view:cardCornerRadius="4dp"> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:text="Test" /> 

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

      <android.support.v7.widget.CardView 
       xmlns:card_view="http://schemas.android.com/apk/res-auto" 
       android:id="@+id/card_view3" 
       android:layout_width="match_parent" 
       android:layout_margin="10dp" 
       android:layout_height="110dp" 
       android:padding="15dp" 
       card_view:cardElevation="2dp" 
       card_view:cardCornerRadius="4dp"> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:text="Test" /> 

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

      <android.support.v7.widget.CardView 
       xmlns:card_view="http://schemas.android.com/apk/res-auto" 
       android:id="@+id/card_view4" 
       android:layout_width="match_parent" 
       android:layout_margin="10dp" 
       android:layout_height="110dp" 
       android:padding="15dp" 
       card_view:cardElevation="2dp" 
       card_view:cardCornerRadius="4dp"> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:text="Test" /> 

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

      <android.support.v7.widget.CardView 
       xmlns:card_view="http://schemas.android.com/apk/res-auto" 
       android:id="@+id/card_view5" 
       android:layout_width="match_parent" 
       android:layout_margin="10dp" 
       android:layout_height="110dp" 
       android:padding="15dp" 
       card_view:cardElevation="2dp" 
       card_view:cardCornerRadius="4dp"> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:text="Test" /> 

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


    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="bottom" 
     android:gravity="bottom"> 

     <android.support.design.widget.BottomNavigationView 
      android:layout_width="match_parent" 
      android:layout_height="56dp" 
      android:layout_weight="1" 
      android:foregroundGravity="bottom" 
      android:background="@color/green" 
      app:itemIconTint="@color/white" 
      app:itemTextColor="@color/white" 
      android:id="@+id/bottomnav" 
      app:menu="@menu/main"> 


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

    </RelativeLayout> 



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

試試這個

<?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:id="@+id/container"> 

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_above="@+id/bottom_navigation" 
    android:layout_alignParentTop="true"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
    <android.support.v7.widget.CardView 
     xmlns:card_view="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/card_view" 
     android:layout_width="match_parent" 
     android:layout_margin="10dp" 
     android:layout_height="110dp" 
     android:padding="15dp" 
     card_view:cardElevation="2dp" 
     card_view:cardCornerRadius="4dp"> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:text="Test" /> 

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


    <android.support.v7.widget.CardView 
     xmlns:card_view="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/card_view1" 
     android:layout_width="match_parent" 
     android:layout_margin="10dp" 
     android:layout_height="110dp" 
     android:padding="15dp" 
     card_view:cardElevation="2dp" 
     card_view:cardCornerRadius="4dp"> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:text="Test" /> 

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

     <android.support.v7.widget.CardView 
      xmlns:card_view="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/card_view3" 
      android:layout_width="match_parent" 
      android:layout_margin="10dp" 
      android:layout_height="110dp" 
      android:padding="15dp" 
      card_view:cardElevation="2dp" 
      card_view:cardCornerRadius="4dp"> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:text="Test" /> 

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

     <android.support.v7.widget.CardView 
      xmlns:card_view="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/card_view4" 
      android:layout_width="match_parent" 
      android:layout_margin="10dp" 
      android:layout_height="110dp" 
      android:padding="15dp" 
      card_view:cardElevation="2dp" 
      card_view:cardCornerRadius="4dp"> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:text="Test" /> 

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

     <android.support.v7.widget.CardView 
      xmlns:card_view="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/card_view5" 
      android:layout_width="match_parent" 
      android:layout_margin="10dp" 
      android:layout_height="110dp" 
      android:padding="15dp" 
      card_view:cardElevation="2dp" 
      card_view:cardCornerRadius="4dp"> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:text="Test" /> 

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


<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="bottom" 
    android:gravity="bottom"> 

    <android.support.design.widget.BottomNavigationView 
     android:layout_width="match_parent" 
     android:layout_height="56dp" 
     android:layout_weight="1" 
     android:foregroundGravity="bottom" 
     android:background="@color/green" 
     app:itemIconTint="@color/white" 
     app:itemTextColor="@color/white" 
     android:id="@+id/bottomnav" 
     app:menu="@menu/main"> 


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

</RelativeLayout> 



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