2016-02-10 4 views
2

в моем приложении Я использую viewpager с 3 фрагментами. В двух из них у меня есть recuclerviews. Я принял рекомендацию о новом расположении координатора и сделал свои панели инструментов/показы при прокрутке на recyclerview. Моя проблема заключается в следующем. Говорите, что пользователь прокручивает список recyclerview в фрагменте A и, следовательно, панель инструментов скрыта. После этого пользователь выполняет салфетки и переходит к фрагменту B, у которого нет прокрутки для прокрутки, поэтому панель инструментов может появиться снова. Есть ли способ изменить layout_behaviout так, чтобы пользователь просматривал панель просмотра для отображения панели инструментов?Показать панель инструментов при просмотре пейджера. [CoordinatorLayout]

ПРИМЕЧАНИЕ: ЕСЛИ это возможно, я хочу достичь этого только с использованием XML.

Это мой main_layput код XML:

<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:fab="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.studentsins.lust.MainActivity"> 

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    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" 
     app:layout_scrollFlags="scroll|enterAlways" /> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/sliding_tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     style="@style/NavigationTab"/> 


</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"/> 


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

<com.getbase.floatingactionbutton.FloatingActionsMenu 
    android:id="@+id/floatingActionMenu" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    fab:fab_addButtonColorNormal="@color/blood_orange" 
    fab:fab_addButtonColorPressed="@color/dirtyWhite" 
    fab:fab_addButtonPlusIconColor="@color/dirtyWhite" 
    fab:fab_addButtonSize = "normal" 
    fab:fab_labelStyle="@style/menu_labels_style" 
    fab:fab_labelsPosition="left" 
    app:layout_anchor="@id/viewpager" 
    app:layout_anchorGravity="bottom|end"> 

    <com.getbase.floatingactionbutton.FloatingActionButton 
     android:id="@+id/createPlanBtn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     fab:fab_colorNormal="@color/blood_orange" 
     fab:fab_title="Create a plan" 
     fab:fab_size="normal" 
     app:fab_icon="@drawable/ic_event_white_48dp" 
     fab:fab_colorPressed="@color/dirtyWhite"/> 

    <com.getbase.floatingactionbutton.FloatingActionButton 
     android:id="@+id/changeStatusBtn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     fab:fab_colorNormal="@color/blood_orange" 
     fab:fab_size="normal" 
     app:fab_icon="@drawable/ic_textsms_white_48dp" 
     fab:fab_title="Change status" 
     fab:fab_colorPressed="@color/dirtyWhite"/> 

</com.getbase.floatingactionbutton.FloatingActionsMenu> 

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

я смог добиться этого заклеиванием прослушиватель макетов пейджера. Вот пример: http://stackoverflow.com/a/17833392/5482166 – davehenry

+1

@ davehenry благодарит вас за ваше предложение, но мне было интересно, можно ли это сделать только с использованием XML. Я знаю, как это сделать, используя этого слушателя. –

+1

Gotcha, я думаю, вы могли бы достичь этого более чисто с помощью пользовательского поведения макета. Не уверен, возможно ли это с помощью только xml – davehenry

ответ

1

я смог добиться этого, ссылаясь на AppBarLayout и назвав «setExtended» метод так:

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      //Make sure that the fab is visible when scrolling the pages... 
      MainActivity.mFloatingActionsMenu.animate() 
        .setDuration(150) 
        .translationY(0); 
      //show the toolbar 
      expandToolbar(); 

     } 

     @Override 
     public void onPageSelected(int position) { 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

мой метод expandToolbar:

public void expandToolbar(){ 
    //setExpanded(boolean expanded, boolean animate) 
    AppBarLayout appBarLayout = (AppBarLayout)findViewById(R.id.appBarLayouy); 
    appBarLayout.setExpanded(true, true); 
} 
+1

Это должен быть принятый ответ – user651377

1

Вы должны быть в состоянии сделать это, используя ViewPager.OnPageChangedListener и основанный на странице U находятся на которых и можно получить от метода onPageSelected (целое положение), что часть слушателя. Надеюсь, это то, что вы ищите.

+0

спасибо за ваше предложение, но мне было интересно, можно ли это сделать только с использованием XML. Я знаю, как это сделать, используя этого слушателя. –

+0

в моем опыте, который довольно ограничен, я не обрабатывал такие состояния в XML-файле. Поэтому, если есть какой-то способ указать, что делает viewpager в XML-файле, на основе содержимого, которое, я думаю, не может, что слушатель, вероятно, будет лучшим выбором. – ariochdivij666

+0

Да, я думаю, я должен придерживаться подхода onPageChangeListener. Я потратил немало времени на изучение того, как это сделать, используя XML и CoordinatorLayout. Благодаря! –