Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CollapsingToolbarLayout with RecyclerView

Tags:

android

I've been attempting to implement a CollapsingToolbar with a RecyclerView using

<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/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:fitsSystemWindows="true"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

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

        <ImageView
            android:id="@+id/imageView_list"
            android:layout_width="match_parent"
            android:layout_height="275dp"
            app:layout_collapseMode="parallax"
            android:fitsSystemWindows="true"
            android:scaleType="fitXY"
            android:src="@mipmap/bg_profile_01" />

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/list"/>
</android.support.design.widget.CoordinatorLayout>

list.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="vertical">
<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/item_img"
    android:adjustViewBounds="true"
    />
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/item_txt"
    android:gravity="center"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    android:layout_centerInParent="true"
    />

Adapter

public class ViewAdapter extends RecyclerView.Adapter<ViewAdapter.ViewHolder> {

Context context;
private List<ViewModel> items;
private int itemLayout;

public ViewAdapter(Context context,List<ViewModel> items,int itemLayout) {
    this.context = context;
    this.items = items;
    this.itemLayout = itemLayout;
}

@Override
public int getItemCount() {
    return items.size();
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    ViewModel item = items.get(position);
    holder.itemView.setTag(item);
    holder.text.setText(item.getTitle());

}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
    /*if(parent.getHeight() > 0){
        view.getLayoutParams().height = parent.getHeight() / 6;
    }*/
    ViewHolder vh = new ViewHolder(view, new ViewHolder.AdapterClickListener() {
        @Override
        public void onAadapterItemClick(View view, int position) {
            items.remove(position);
            notifyItemRemoved(position);
        }
    });
    return  vh;
}


public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    public ImageView image;
    public TextView text;
    public AdapterClickListener adapterClickListener;

    public ViewHolder(View itemView, AdapterClickListener adapterClickListener) {
        super(itemView);
        this.adapterClickListener = adapterClickListener;
        image = (ImageView)itemView.findViewById(R.id.item_img);
        text=(TextView)itemView.findViewById(R.id.item_txt);
        itemView.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        adapterClickListener.onAadapterItemClick(v, getAdapterPosition());
    }

    public static interface AdapterClickListener {
        public void onAadapterItemClick(View view, int position);
    }
}

main

private void init(){
    recyclerView = (RecyclerView)findViewById(R.id.list);
    recyclerView.setHasFixedSize(true);
    recyclerView.setAdapter(new ViewAdapter(getApplicationContext(), CreateItemList(), R.layout.item_list));
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

}

private List<ViewModel> CreateItemList(){
    List<ViewModel> items = new ArrayList<ViewModel>();
    for(int i=0;i<20;i++){
        ViewModel model = new ViewModel();
        model.setTitle("title_" + i);

        items.add(model);
    }
    return items;
}

But RecyclerView occupies the entire screen

I don't know when it started to go wrong.

I'm sorry I`m not good at English ㅠ_ㅠ

like image 759
kimtaehun Avatar asked Mar 17 '26 08:03

kimtaehun


1 Answers

Just add : app:layout_behavior="@string/appbar_scrolling_view_behavior" to your Recycler View.

It will look like this :

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/list"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />
like image 146
Vipul Asri Avatar answered Mar 18 '26 23:03

Vipul Asri



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!