[英]CollapsingToolbarLayout with RecyclerView
I've been attempting to implement a CollapsingToolbar with a RecyclerView using 我一直在尝试使用RecyclerView实现CollapsingToolbar
<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 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 但RecyclerView占据整个屏幕
I don't know when it started to go wrong. 我不知道它何时开始出问题。
I'm sorry I`m not good at English ㅠ_ㅠ 对不起,我不擅长英语ㅠ_ㅠ
Just add : app:layout_behavior="@string/appbar_scrolling_view_behavior"
to your Recycler View . 只需将:
app:layout_behavior="@string/appbar_scrolling_view_behavior"
到您的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" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.