2016-02-23 11 views
42

Ich habe eine CoordinatorLayout, die AppBarLayout und eine FrameLayout enthält, die Fragmente enthält.Fix untere Leiste in CoordinatorLayout

Eines dieser Fragment enthält eine TabLayout oben, eine Liste durch RecyclerView und unten eine "hausgemachte" Symbolleiste.

Die AppBarLayout ist so konfiguriert, mit app:layout_scrollFlags="scroll|enterAlways"

Mein Problem ist, dass beide „Symbolleisten“ verstecken, wenn blättern, die AppBarLayout und meine „hausgemachten“ Symbolleiste am unteren Rand. Dies ist das aktuelle Verhalten

enter image description here

Ich möchte den Boden „hausgemachte“ Symbolleiste beheben sichtbar zu halten, aber ich kann es nicht erreichen.

Dies ist das XML des Fragments Layout-

<?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 Fragen scheint das gleiche Problem.

+0

Könnten Sie mir einen Gefallen tun und uns zeigen, wie Sie auf die untere Leiste versteckt? Ich kann nicht scheinen es herauszufinden ... (Ich brauche nicht die obere Leiste, nur die Unterseite) – AndreiBogdan

+1

Hallo Hanzo, Haben Sie eine Lösung für dieses Problem gefunden? – Sharath

+0

können Sie Ihre XML-Datei, die 'CoordinatorLayout' enthält, posten –

Antwort

1

Dieses Verhalten entfernt im Allgemeinen Scroll-Flag SCROLL aus AppBarLayout, beim Scrollen Inhalt in abhängiger Ansicht (RecyclerView, NestedScrollView) weniger als view Höhe, dh. wenn das Scrollen nicht benötigt wird. Es überschreibt auch die Offset-Scroll-Ansicht, die normalerweise von AppBarLayout.ScrollingViewBehavior durchgeführt wird. Funktioniert gut beim Hinzufügen von Fußzeilen, dh. Schaltfläche, zum Scrollen Ansicht oder in ViewPager, wo die Inhaltslänge auf jeder Seite unterschiedlich sein kann.

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

bereits beantwortet in https://stackoverflow.com/a/37293634

1

Bottom bar zu beheben, zunächst müssen Sie eine Aktivität verwenden, wo Registerkarten vorhanden. In dieser Aktivität verwenden Sie verschiedene Fragmente. Fügen Sie Ihre tabLayout in diesem 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> 

Für Fragmentsicht Verwendung

fragment_tab.xml

hier verwenden App: layout_scrollFlags = "scroll | enterAlways" in Symbolleiste um es scrollbar zu machen

<?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

Sie können die collapseMode auf yout Symbolleiste so etwas wie dies versuchen und hinzuzufügen.

Ihre appBarLayout scheint in Ordnung

Ich würde u raten unter diesem Link zu sehen: 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

ich gleiche Problem hier ist die Art und Weise konfrontiert, die für mich gearbeitet

Remove die AppBarLayoutlayout_behavior so oben fixiert. Definieren Sie das FrameLayout layout_behavior als app:layout_behavior="@string/appbar_scrolling_view_behavior", so dass es FrameLayout unterhalb der AppBarLayout anpassen. Auf diese Weise scrollt Ihr Inhalt des Rahmenlayouts, aber nicht die Symbolleiste. CoordinatorLayout Layout wie wie folgt

<?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> 

Dies ist das XML des Ihre Fragment-Layout, wo Ihre recyclerView blättern ohne Ihre TabLayout und unten Linear-Layout zu beeinflussen.

<?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> 

Ich hoffe, es hilft jemand dank

für weitere Informationen - Scrolling Behavior for Appbars in Android

1

Sie können dies in coordinatorlayout nicht tun. so verwenden RelativeLayout und in seinem Design ein eigenes Layout

4

dieses Layout Versuchen:

<?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

versuchen diese

<?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> 
Verwandte Themen