记录初次使用behavior中遇到的问题。
(文中加粗的都是个人认为容易犯错的地方,关于behavior和coordinatorlayout的介绍就不放了)
先看下自定义behavior类:
public class xxxbehavior extends CoordinatorLayout.Behavior {
/**
* Default constructor for instantiating Behaviors.
*/
public xxxbehavior() {}
/**
* Default constructor for inflating Behaviors from layout. The Behavior will have
* the opportunity to parse specially defined layout parameters. These parameters will
* appear on the child view tag.
*
* @param context
* @param attrs */
public xxxbehavior(Context context, AttributeSet attrs) {
super(context, attires);
}
}
使用方法:
app:layout_behavior="com.example.xxx.behavior.xxxbehavior"
在xml中使用该方法添加behavior,在构造方法的注释中就可看出,这里总是调用xxxbehavior(Context context, AttributeSet attires)构造函数,同时还可以声明自定义参数方便自己使用。
在此处调用的是
xxxbehavior behavior=new xxxbehavior();
coordinatorlayout.LayoutParams params=(coordinatorlayout.LayoutParams)yourview.getLayoutParams();
params.setBehavior(behavior);
在代码中绑定behavior,在此处就是调用默认的空构造器了。
要使用behavior,其xml的根布局必须是coordinatorlayout。而该布局是在Android5.0以后引入的,所以在此前的系统中是没有效果的。
平时可能会碰到比较复杂的布局,会使用include标签。如果想要使用behavior,则需要注意:Behavior只有是CoordinatorLayout的直接子View才有意义。
在了解behavior的调用方法后,开始来使用behavior。
behavior的使用范围仅限于实现了NestedScrollingChild接口,如果有些控件不支持,可以自定义该控件同时实现该接口。
首先使用系统系统自带的效果
![](https://img.haomeiwen.com/i1982159/ccd2faaa0a644d16.gif)
代码:
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:fitsSystemWindows="true"
android:layout_height="256dp"
android:theme="@style/theme.AppBarOverlay">
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="56dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
android:src="@drawable/img_head2"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:navigationIcon="@drawable/ic_account_circle_deep_purple_400
_24dp"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:title="xxxx"
app:titleTextColor="@color/white"
app:layout_collapseMode="pin"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
在recyclerview标签中添加:
app:layout_behavior="@string/appbar_scrolling_view_behavior"
如果不加CollapsingToolbarLayout,效果就是toolbar会收缩。
使用该效果主要是在AppBarLayout中添加CollapsingToolbarLayout布局,注意添加android:fitsSystemWindows="true",否则会和上下产生间距。
CollapsingToolbarLayout 提供以下属性和方法是用:
- Collapsing title:ToolBar的标题,当CollapsingToolbarLayout全屏没有折叠时,title显示的是大字体,在折叠的过程中,title不断变小到一定大小的效果。你可以调用setTitle(CharSequence)方法设置title。
- Content scrim:ToolBar被折叠到顶部固定时候的背景,你可以调用setContentScrim(Drawable)方法改变背景或者 在属性中使用 app:contentScrim=”?attr/colorPrimary”来改变背景。
- Status bar scrim:状态栏的背景,调用方法setStatusBarScrim(Drawable)。还没研究明白,不过这个只能在Android5.0以上系统有效果。
- Parallax scrolling children:CollapsingToolbarLayout滑动时,子视图的视觉差,可以通过属性app:layout_collapseParallaxMultiplier=”0.6”改变。值de的范围[0.0,1.0],值越大视察越大。
- CollapseMode :子视图的折叠模式,在子视图设置,有两种“pin”:固定模式,在折叠的时候最后固定在顶端;“parallax”:视差模式,在折叠的时候会有个视差折叠的效果。我们可以在布局中使用属性app:layout_collapseMode=”parallax”来改变。
我们还可以在此基础上添加悬浮控件(此处使用FloatingActionButton)
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|right|end"
android:layout_marginRight="16dp"
app:srcCompat="@android:drawable/ic_dialog_email" />
使用app:layout_anchor="@id/appbar"来进行关联
app:layout_anchorGravity="bottom|right|end"的参数来决定控件的位置,同时有能使用margin等参数。
下一章记录使用自定义behavior
网友评论