0

MainActivityにフラグメントをロードしました。フラグメントのレイアウトの上に、ユーザが上下にスクロールする際に表示/非表示にしたいLinearLayoutがあります。RecyclerViewをスクロールするときのLinearLayoutの表示/非表示は?

は、コーディネーターのレイアウトを使用して、これを達成することができますか私は自分のハックを行う必要がありますか?

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ですが、この部分は簡単です:

@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

関連する問題