CoordinatorLayout
Android CoordinatorLayout+RecyclerView Demo
Android CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout实现浮动导航栏效果
布局中比较重要的参数
CollapsingToolbarLayout中
<!--防止最后recyclerview一条数据显示不全 android:minHeight="?actionBarSize"-->
<!--设置收缩后的颜色app:contentScrim="@color/amber_600"-->
parallax 视差效果,和视差系数,如图2
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.5"
视差系数设置为1则图片不动,如图1
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="1"
pin 整体向上移动
app:layout_collapseMode="pin"
赋予collapse收缩属性
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
使collapse默认收缩
binding.appbar.setExpanded(false,false)
recyclerView中
<!--必须要加上这个app:layout_behavior="@string/appbar_scrolling_view_behavior"才能和CoordinatorLayout联动-->
主界面布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="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:orientation="vertical"
tools:context=".Test.CoordinatorLayoutDemo.CoordinatorLayoutActivity">
<android.support.design.widget.CoordinatorLayout
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary">
<!--防止最后recyclerview一条数据显示不全 android:minHeight="?actionBarSize"-->
<!--设置收缩后的颜色app:contentScrim="@color/amber_600"-->
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingToolbarLayout"
app:contentScrim="@color/amber_600"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?actionBarSize"
app:expandedTitleGravity="bottom|center_horizontal"
app:expandedTitleMarginBottom="16dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
app:title="@string/app_name">
<ImageView
android:id="@+id/im_header"
android:layout_width="match_parent"
android:layout_height="200dp"
android:contentDescription="@string/app_name"
android:scaleType="centerCrop"
android:src="@mipmap/bg_make_story_4"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.5" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="73dp"
android:paddingTop="25dp"
app:layout_collapseMode="pin" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<!--必须要加上这个app:layout_behavior="@string/appbar_scrolling_view_behavior"才能和CoordinatorLayout联动-->
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/grey_200"
android:padding="20dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
</LinearLayout>
主界面
package com.jianji.delogo.Test.CoordinatorLayoutDemo;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.jianji.delogo.R;
import java.util.ArrayList;
public class CoordinatorLayoutActivity extends AppCompatActivity {
private Activity activity = CoordinatorLayoutActivity.this;
private RecyclerView recycler;
public static void start(Context context) {
Intent intent = new Intent(context, CoordinatorLayoutActivity.class);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_coordinator_layout);
initView();
initData();
}
private void initData() {
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < 25; i++) {
list.add("item" + i);
}
CoordinatorDemoAdapter adapter = new CoordinatorDemoAdapter(list);
recycler.setAdapter(adapter);
recycler.setLayoutManager(new LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, true));
}
private void initView() {
recycler = (RecyclerView) findViewById(R.id.recycler);
}
}
RecyclerView适配器
package com.jianji.delogo.Test.CoordinatorLayoutDemo;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.jianji.delogo.R;
import java.util.ArrayList;
public class CoordinatorDemoAdapter extends RecyclerView.Adapter<CoordinatorDemoAdapter.ViewHolder> {
private ArrayList<String> dataList;
public CoordinatorDemoAdapter(ArrayList<String> dataList) {
this.dataList = dataList;
}
@NonNull
@Override
public CoordinatorDemoAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler_coordinator, parent, false);//解决宽度不能铺满
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull CoordinatorDemoAdapter.ViewHolder viewHolder, int i) {
viewHolder.textView.setText(dataList.get(i) + "...");
}
@Override
public int getItemCount() {
return dataList.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
private TextView textView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
}
}
}