Toolbar 上滑隐藏,下滑显示
今天加班
下班时,检查任务,有一个小BUG,本以为是比较简单的,改一会就好了,没想到这一改到了现在。
主要功能就是使顶部标题栏在用户向上滑动界面时隐藏,向下滑动时再显示出来,感觉挺简单的,第一次做的时候是同事写的,底下是一个ScrollView,直接用ScrollView的setOnTouchListener方法做监听,当滑动的时候做逻辑,但是在测试的时候发现有时候会有错误,经常滑着滑着就没了....
然后开始改
上网搜到CoordinatorLayout这个布局,可以做很多滑动操作。
发现很强大。
开始上手。
然后就出现了问题,发现好像和RecycleView、GridView与ListView都可以,但是和ScrollView一起时就没有了作用。
当时由于已经下班一段时间了,没有继续在这个方向深挖,而是去尝试了其他的思路。
无果。
从公司出来吃饭回家,再次尝试。
此时开始继续研究CoordinatorLayout和ScrollView的问题,直接在StackOverflow上找到了答案。
CoordinatorLayout下使用ScrollView时,必须使用NestedScrollView才可以达到需求的效果
然后就开始改啊改啊...
又遇到了其他的问题,下来的知识点就是:
windowActionBar:在自定义的Theme中设置成false,就没有系统默认的菜单选项了。
windowNotTitle: 设置这个属性为true则不显示标题了
colorPrimary:这个属性是你的actiinbar的属性颜色colorPrimaryDark:这个属性则是你的标题栏的颜色,你可以设置和你自定义的标题栏一个颜色
android:windowTranslucentStatus 将界面拉升到顶部状态栏,并且定义顶部状态栏透明,这样你的页面就是一整张了,没有上面电池背景条之类的了,整个页面看上去会好很多
android:windowTranslucentNavigation 设置你的虚拟键透明,这个虚拟键就是返回和菜单键等 设置这个为true后会出现问题,底部如果是按键就会与手机底部虚拟按键重合,解决方法如下:
先判断一下你的手机是否含有NavigationBar这个东西,就是虚拟键,判断代码如下
public static boolean isHaveNavigationBar (Context context) {
boolean isHave = false;
Resources rs = context.getResources();
int id = rs.getIdentifier("config_showNavigationBar","bool","android");
if (id > 0) {
hasNavigationBar = rs.getBoolean(id);
}
try{
Classsystem PropertiesClass=Class.forName("android.os.SystemProperties");
Methodm=systemPropertiesClass.getMethod("get",String.class);
String navBarOverride=(String)m.invoke(systemPropertiesClass,"qemu.hw.mainkeys");
if("1".equals(navBarOverride)) {
isHave=false;
}else if("0".equals(navBarOverride)) {
isHave=true;
}
}catch(Exceptione) {
Log.w("TAG",e);
}
return isHave;
}
返回为true的话就不给他设置,反之设置,具体代码如下:
public static void transportStatus (Activity context){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
if(!isHaveNavigationBar(context))
context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
}
这样就可以达到想要的效果了.
CoderTung的第9篇知识储备。