1.CoordinateLayout
继承ViewGroup,通过协调并调度里面的子控件或者布局来实现触摸(一般是指滑动)产生相关的动画效果。可以通过设置View的Behavior来实现触摸的动画调度。
CoordinateLayout里面的所有子控件都可以监听触摸事件。
2.RecyclerView
2.1.监听滑动事件
继承 RecyclerView.OnScrollListener 并实现 onScrolled
/**
*
* @param recyclerView
* @param dx
* @param dy Y轴变化差值,向上滑为正,向下为负。
*/
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
}
2.2.属性
android:clipToPadding="false" //toolbar下面的RecyclerView透明
android:clipChildren="false" //是否限制子View在其范围内,默认为true
android:layout_height="?/attr/actionBarSize" 获取ActionBar的高度
2.3.添加头部和底部
3.沉浸式(translucent)设计
官方:让整个App沉浸(充斥)在整个屏幕,没有状态栏,设置没有显示底部导航栏。
民间:Toolbar和状态栏一体颜色。
3.1.ToolBar设置沉浸式
3.1.1.Android5.x设置沉浸式
第一种:
1.App主题继承
Theme.AppCompat.DayNight.NoActionBar
2.在App主题里面添加colorPrimaryDark属性设置主题颜色
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
第二种:通过代码设置
getWindow().setStatusBarColor(getColor(R.color.colorAccent));
第三种:通过navigationBarColor设置
<item name="android:navigationBarColor">#colorAccent</item>
3.1.2.Android4.4以上设置沉浸式
设置状态栏为透明
第一种:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
在setContentView之前添加。原因:window --> PhoneWindow(线性布局,状态栏和Activity) , 所以在渲染activity布局之前添加一个flag,让渲染的时候设置为透明,如果放在setContentView之后,则不起效果。
状态栏会遮挡一些UI界面
//设置布局时,是否考虑当前系统窗口布局,true,调整整个系统窗口布局(状态栏View),以适应你的布局。
android:fitsSystemWindows="true"
3.2.导航栏(NavigationBar)沉浸式
3.2.1.Android5.x设置沉浸式
第一种:
属性解决
<item name="android:navigationBarColor">#000000</item>
第二种:
代码解决
状态栏属于系统UI,所以要放在setContentView之前
getWindow().setNavigationBarColor();
网友评论