Open alwaystest opened 8 years ago
标签(空格分隔): Android Theme
首先,Styles下面的主题继承有两种方式
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
使用.表示继承关系: <style name="AppTheme.AppBarOverlay"/> 表示继承自AppTheme。
.
<style name="AppTheme.AppBarOverlay"/>
当使用parent指定父Style后,前缀方式则不在其作用,只是作为Style的名字。也就是说:Android的Style不支持多继承。出处
兼容性处理
使用Theme.AppCompat开头的主题。 Android5.0新增的属性在使用时将命名空间android去掉,这样就会使用AppCompat的自定义属性,交予AppCompat做兼容性处理。出处
注:此处找了半天 没有找到相关资料,TODO:XML的NameSpace原理。相关
透明状态栏参考
遇到一个奇怪的问题。
加了一个依赖项com.jaeger.statusbaruitl:library:1.1.0 打开应用直接崩溃了,报错:
com.jaeger.statusbaruitl:library:1.1.0
Error inflating class android.support.design.widget.NavigationView
查看StackOverflow发现错误原因是
appcompat library and design support library doesn't match.
看了一下新引入的依赖是依赖于com.android.support:appcompat-v7:23.4.0 而我原先的代码依赖于com.android.support:appcompat-v7:23.0.1
com.android.support:appcompat-v7:23.4.0
com.android.support:appcompat-v7:23.0.1
那么如果有多个第三方库,依赖于不同版本的appcompat library 和 design support library,那么程序就有很大可能Crash了。
appcompat library
design support library
android:clipToPadding
android:fitsSystemWindows
系统高于LOLLIPOP时,可以直接通过Activity.getWindow.setStatusBarColor(int Color)方法设置状态栏的背景颜色。但是 背景颜色设置为android.R.color.transparent的时候,并没有实现将当前Activity显示的内容的背景图片的顶部绘制到状态栏下边。 我想要的是这个效果 要实现这个效果,首先需要设置
LOLLIPOP
Activity.getWindow.setStatusBarColor(int Color)
android.R.color.transparent
activity.getWindow.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
然后把图片背景设置给根布局。对于DrawerLayout,可以把背景设置给 DrawerLayout,也可以设置给内容布局。但是DrawerLayout 必须设置fitSystemWindows=false,内容布局的fitSystemWindows=true,才能防止状态栏覆盖内容。
fitSystemWindows=false
fitSystemWindows=true
把图片背景设置给DrawerLayout的内容布局(DrawerLayout只能包含两个直接子布局,一个内容子布局,一个抽屉子布局)。设置内容布局的fitSystemWindows=true才可以防止状态栏覆盖内容。
DrawerLayout的padding不影响抽屉的显示位置,也不会影响内容的显示位置,当把图片设为Drawerlayout的背景,并且设置Drawerlayout的fitSystemWindows=true,Drawerlayout的Padding会遮盖部分内容布局和抽屉布局。并且设置了DrawerLayout的fitSystemWindows=true时,子布局的fitSystemWindows=true没有效果,即子布局的一部分就被状态栏遮挡了。
使用Android 状态栏工具类
如果你在一个包含 DrawerLayout 的界面中使用, 你需要在布局文件中为 DrawerLayout 添加 android:fitsSystemWindows="true" 属性
这里的实现方式是向android.R.id.content的view里添加了一个半透明的矩形条来避免DrawerLayout的padding遮挡内容。
android.R.id.content
fitSystemWindow
false
true
暂时没有考虑如何兼容4.4的状态栏透明,手头没有真机,不想搞AVD。
想要兼容到4.4的同学,可以传送到这里:
Android Theme 及透明状态栏 杂记
标签(空格分隔): Android Theme
Inheritance 继承
首先,Styles下面的主题继承有两种方式
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
使用
.
表示继承关系:<style name="AppTheme.AppBarOverlay"/>
表示继承自AppTheme。兼容性处理
注:此处找了半天 没有找到相关资料,TODO:XML的NameSpace原理。相关
透明状态栏参考
2016/6/17 尝试第三方解决方式
遇到一个奇怪的问题。
加了一个依赖项
com.jaeger.statusbaruitl:library:1.1.0
打开应用直接崩溃了,报错:查看StackOverflow发现错误原因是
看了一下新引入的依赖是依赖于
com.android.support:appcompat-v7:23.4.0
而我原先的代码依赖于com.android.support:appcompat-v7:23.0.1
那么如果有多个第三方库,依赖于不同版本的
appcompat library
和design support library
,那么程序就有很大可能Crash了。android:clipToPadding
和android:fitsSystemWindows
。参考这里。系统高于
要实现这个效果,首先需要设置
LOLLIPOP
时,可以直接通过Activity.getWindow.setStatusBarColor(int Color)
方法设置状态栏的背景颜色。但是 背景颜色设置为android.R.color.transparent
的时候,并没有实现将当前Activity显示的内容的背景图片的顶部绘制到状态栏下边。 我想要的是这个效果然后把图片背景设置给根布局。对于DrawerLayout,可以把背景设置给 DrawerLayout,也可以设置给内容布局。但是DrawerLayout 必须设置
fitSystemWindows=false
,内容布局的fitSystemWindows=true
,才能防止状态栏覆盖内容。DrawerLayout的padding不影响抽屉的显示位置,也不会影响内容的显示位置,当把图片设为Drawerlayout的背景,并且设置Drawerlayout的
fitSystemWindows=true
,Drawerlayout的Padding会遮盖部分内容布局和抽屉布局。并且设置了DrawerLayout的fitSystemWindows=true
时,子布局的fitSystemWindows=true
没有效果,即子布局的一部分就被状态栏遮挡了。使用Android 状态栏工具类
这里的实现方式是向
android.R.id.content
的view里添加了一个半透明的矩形条来避免DrawerLayout的padding遮挡内容。总结
fitSystemWindow
必须为false
。fitSystemWindow
设为true
以防止内容被遮挡。暂时没有考虑如何兼容4.4的状态栏透明,手头没有真机,不想搞AVD。
想要兼容到4.4的同学,可以传送到这里:
参考