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"</