0

У меня есть фрагмент, загруженный в мою MainActivity. В верхней части макета фрагмента у меня есть LinearLayout, который я хотел бы показать/скрыть, когда пользователь прокручивает вверх/вниз.Показать/скрыть LinearLayout при прокрутке RecyclerView?

Может ли это быть достигнуто с использованием схемы Координатора или мне нужно сделать свой собственный взлом?

layout.xml:

<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" 
     android:background="#ececec"> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/discoverRView" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:paddingLeft="5dp" 
      android:paddingRight="5dp"> 

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


     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="100dp" 
      android:background="#f00" 
      app:layout_anchor="@+id/discoverRView" 
      app:layout_anchorGravity="top" 
      app:layout_scrollFlags="scroll" 
      > 

     </LinearLayout> 



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

Вы уже пробовали добавить 'scrollFlags' в свой' LinearLayout'? (Совсем похоже на поведение из «AppBarLayout») – yennsarah

+0

Хорошо, это была просто быстрая идея. ^^ 'Но я добавил ответ. – yennsarah

+0

Спасибо в любом случае! :) –

ответ

2

Может быть, есть более эффективные решения, но это может быть достигнуто путем создания пользовательских CoordinatorLayout.Behavior и добавить его в CustomLinearLayout:

//This is taken from a project of mine, it scrolls a Layout up if a snackbar shows up. 

public class MoveUpwardBehavior extends CoordinatorLayout.Behavior<View> { 

    public MoveUpwardBehavior(){ 
     //super(); 
    } 

    public MoveUpwardBehavior(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) { 
     float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); 
     child.setTranslationY(translationY); 
     return true; 
    } 

    @Override 
    public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) { 
     return dependency instanceof Snackbar.SnackbarLayout; 
    } 
    @Override 
    public void onDependentViewRemoved(CoordinatorLayout parent, View child, View dependency) { 
     super.onDependentViewRemoved(parent, child, dependency); 
     child.setTranslationY(0); 
    } 
} 

Вы будете нуждаться в изготовленный под заказ LinearLayout, но эта часть легкая peasy:

@CoordinatorLayout.DefaultBehavior(MoveUpwardBehavior.class) 
public class CustomLinearLayout extends LinearLayout { 

    public CustomLinearLayout(Context context) { 
     super(context); 
    } 

    public CustomLinearLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    public CustomLinearLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
    } 
} 

Конечно, вы должны будете использовать этот макет в вашем xml:

<com.your.project.CustomLinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="100dp" 
    android:background="#f00" 
    app:layout_anchor="@+id/discoverRView" 
    app:layout_anchorGravity="top"> 
    </com.your.project.CustomLinearLayout> 

Так что, я думаю, вы получите идею. Вам нужно будет обновить поведение, зависящее от прокрутки вашего RecyclerView. Если вам нужна дополнительная помощь, я могу попытаться создать рабочий пример.

+0

Спасибо! Вы действительно любезны поделиться этим, я собираюсь попробовать. –

+0

Еще раз спасибо! Я тестировал и работает хорошо. Но в то же время я пришел к более простому решению: используя панель инструментов внутри AppBarLayout (глупо меня). Затем я настраиваю панель инструментов по мере необходимости, размещая виды, которые мне нравятся внутри. –

+0

Я рад, что ты справился. Счастливое кодирование! – yennsarah

Смежные вопросы