引言
Google在Android 5.0推出了Material Design风格让我们得以丰富app效果,简称MD风格。谷歌称:“Material Design是美丽和大胆的,因为干净的排版和布局简单且容易理解。”而CollapsingToolbarLayout控件就是这类MD风格的产物。使用其可以实现折叠式标题布局的效果。(类似网易新闻,具体图示在后文展示)
效果展示
可折叠式布局.gif介绍
CollapsingToolLayout,是一个作用于ToolBar基础之上的布局,CollapsingToolLayout可以让TooBar的效果变得更加丰富,不仅仅是展示一个标题栏,而是能够实现非常华丽的效果。
不过值得注意的是,CollapsingToolLayout在设计的时候,就被限定只能作为AppBarLayout的直接子布局来使用。而AppBarLayout又必须是CoordinatorLayout的子布局。
所以它们在使用时的包含关系为:
CoordinatorLayout包含AppBarLayout包含CollapsingToolLayout包含你的标题栏TitleBar,不需要隐藏的部分处于AppBarLayout平级,CoordinatorLayout之下。
用法
第一步:添加依赖(mudule下build.gradle)
//matrial design
implementation "com.google.android.material:material:1.1.0-alpha07"
//navigation
//noinspection GradleCompatible
implementation 'com.android.support:design:29.1.1'
//Glide--加载高清图片使用
implementation 'com.github.bumptech.glide:glide:4.11.0'
第二步:布局文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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"
tools:context=".show.Case11">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBar"
android:layout_width="match_parent"
android:layout_height="250dp">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collsping_Toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blue"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:contentScrim="@color/green"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<!--指定标题栏的具体内容-->
<ImageView
android:id="@+id/fruit_image_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="center"
android:src="@drawable/meizi"
app:layout_collapseMode="parallax" />
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin">
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<!--内容详情-->
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!--卡片式布局-->
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_marginTop="35dp"
android:layout_marginBottom="15dp"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
app:cardCornerRadius="4dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/fruit_content_text"
android:layout_width="wrap_content"
android:layout_margin="10dp"
android:layout_height="wrap_content"/>
</androidx.cardview.widget.CardView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<!--悬浮按钮-->
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:src="@drawable/ic_comment"
app:layout_anchor="@id/appBar"
app:layout_anchorGravity="bottom|end"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
第三步:创建实体类
package com.example.mydemo.entity;
/**
* @data on 2020/8/27 9:47 PM
* @auther ArmStrong
* @describe
*/
public class Fruit {
private String name;
private int imageId;
public Fruit(String name, int imageId) {
this.name = name;
this.imageId = imageId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImageId() {
return imageId;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
}
第四步:activity中代码实现
public class Case11 extends AppCompatActivity {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_case11);
Fruit fruit = new Fruit("苹果香蕉火龙果!",R.drawable.meizi);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout)findViewById(R.id.collsping_Toolbar);
ImageView fruitImageView = (ImageView)findViewById(R.id.fruit_image_view);
TextView fruitContentText = (TextView)findViewById(R.id.fruit_content_text);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if(actionBar!=null){
actionBar.setDisplayHomeAsUpEnabled(true);
}
collapsingToolbar.setTitle(fruit.getName());
Glide.with(this).load(fruit.getImageId()).into(fruitImageView); //高清图使用glide压缩显示
String fruitContent = generatorFruitContent(fruit.getName());
fruitContentText.setText(fruitContent);
}
//填充卡片布局的text数据
private String generatorFruitContent(String fruitName){
StringBuilder fruitContent = new StringBuilder();
for (int i=0;i<500;i++){
fruitContent.append(fruitName);
}
return fruitContent.toString();
}
//返回键设置
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
}
网友评论