UI之CoordinatorLayout、AppbarLayout、CollapsingToolbarLayout的使用

本文详细介绍了Android UI设计中CoordinatorLayout、AppBarLayout和CollapsingToolbarLayout的使用。CoordinatorLayout作为一个强大的顶层布局,用于实现手势影响布局的动画效果。文中讲解了Behavior的概念,它是CoordinatorLayout中协助子视图交互的抽象类,并列举了预置的行为,如AppBarLayout.Behavior等。同时,展示了CoordinatorLayout如何与FloatingActionButton和AppBarLayout配合使用,以及如何通过behavior控制子视图的行为。最后,文章探讨了自定义Behavior的两种方法,并提供了依赖和嵌套机制的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.CoordinatorLayout 是什么

CoordinatorLayout 是一种功能更强大的FrameLayout

主要用于:
1.作为window的顶层布局 decor
2.作为父容器调度协调子布局,通过设置子View的 Behavior来调度子View的布局实现手势影响布局的形式产生动画效果
3.Behavior是CoordinatorLayout中的一个抽象类,用来协助CoordinatorLayout的Child Views之间的交互,Library中提供了
AppbarLayout.Behavior\AppBarLayout.ScrollingViewBehavior\FloatingActionButton.Behavior\SwipeDismissBehavior等实现子类,也可以自行定义实现子类。

2.CoordinatorLayout的使用

  • 引入依赖

    compile 'com.android.support:design:22.2.1'

  • CoordinatorLayout与 FloatingActionButton合用

    // 在布局中加入coordinatorlayout和FloatingActionButton的控件
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/coor_main"
        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="com.example.wendy.coordinatorlayout.MainActivity">
    
        <android.support.design.widget.FloatingActionButton
            android:id="@+id/fab_main"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end|bottom"
            android:layout_marginBottom="10dp"
            android:layout_marginRight="10dp"
            android:elevation="4dp"
            android:src="@drawable/ic_action_accept"
            app:fabSize="normal"/>
      </android.support.design.widget.CoordinatorLayout>
    
    //代码 
    public class MainActivity extends AppCompatActivity {
        private FloatingActionButton fab;
        private CoordinatorLayout coor_layout;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            init();
        }
    
        private void init() {
            fab = findViewById(R.id.fab_main);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                //Snackbar 和toast的用法相似,snackbar是从屏幕底滑出,通过setAction()方法可能给snackbar添加一个按钮
                    Snackbar.make(view, "hello, I am smackbar!", Snackbar.LENGTH_LONG).setAction("UNDO", 
                    new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            //点击SnackBar上胡按钮后需要做的操作
                            fab.setImageResource(R.drawable.ic_action_cancel);
                        }
                    }).show();
                }
            });
        } }
    
    

    这里写图片描述

    展示效果:弹出SnackBar 时,FloatingActionButton布局会向上移动
    FloatingActionButton是默认使用FloatingActionButton.Behavior


  • Coordinatorlayout与AppbarLayout合用

    AppBarLayout :
    继承自LinearLayout,子控件默认为竖直方向显示,可以用它实现Material Design 的Toolbar;它支持滑动手势;它的子控件可以通过在代码里调用setScrollFlags(int)或者在XML里app:layout_scrollFlags来设置它的滑动手势。当然实现这些的前提是它的根布局必须是 CoordinatorLayout。这里的滑动手势可以理解为:当某个可滚动View的滚动手势发生变化时,AppBarLayout内部的子View实现某种动作。AppBarLayout的子控件不仅仅可以设置为Toolbar,也可以包含其他的View,AppBarLayout必须作为Toolbar的父布局容器。
    app:layout_scrollFlags="[scroll | enterAlways |
    enterAlwaysCollapsed | exitUntilCollapsed]"

    scroll:可以滚动出屏幕的Flag,如没有设置则view会停留在屏幕顶部
    enterAlways:任意向下滚动都会使该view变为可见,启用快速”返回模式”。
    enterAlwaysCollapsed: 当你的视图已经设置minHeight属性又使用此标志时,你的视图只能以最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。
    exitUntilCollapsed: 滚动退出屏幕,最后折叠在顶端

//布局
<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/coor_main"
    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="com.example.wendy.coordinatorlayout.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar_main"
            android:layout_width="match_parent"
            android:layout_height="?android:attr/actionBarSize"
            android:background="@color/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:titleTextColor="#ffffff"/>

        <com.astuetz.PagerSlidingTabStrip
            android:id="@+id/title_main"
            android:layout_width="match_parent"
            android:layout_height="48dip"
            app:pstsDividerColor="#0e0e0e"
            app:pstsDividerPadding="15dp"
            app:pstsDividerWidth="1dp"
            app:pstsIndicatorColor="#ffffff"
            app:pstsIndicatorHeight="2dp"
            app:pstsShouldExpand="true"
            app:pstsTabBackground="@color/colorPrimaryLight"/>

    </android.support.design.widget.AppBarLayout>

  <!--viewpager中必须设置layout_behavior属性-->
    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值