Android状态栏颜色控制
像qq之类的应用,在使用时,系统状态栏的颜色也随着activity的头部颜色变动,使得整个屏幕的style看起来是一致的。
android 沉浸式状态栏(像ios那样的状态栏与应用统一颜色样式)
这部分是我偶然间在其他博客看到的
这个特性是andorid4.4支持的,最少要api19才可以使用。下面介绍一下使用的方法,非常得简单:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
}
此时就可以实现沉浸效果了,但是存在一定的问题:
状态栏不占用位置了–>若布局头部是TextView的话,此时给text赋值,会发现,text与标题栏的位置,及屏幕左上角。很明显,这并不是我们需要的效果。那么如何更改呢?只需要给布局的头View加入如下属性即可
android:fitsSystemWindows="true"
android:clipToPadding="true"
在这里解释一下这两个属性的意思:
android:clipToPadding 定义布局间是否有间距
android:fitsSystemWindows=”true”意思就是设置应用布局时是否考虑系统窗口布局;如果为true,将调整系统窗口布局以适应你自定义的布局。比如系统有状态栏,应用也有状态栏时。看你这个布局代码,恰恰是在定义标题栏样式,所以用到这行代码了。
SystemBarTintManager
github https://github.com/hexiaochun/SystemBarTint
下载地址
可以自由控制状态栏的各种效果
使用方法
- 下载SystemBarTintManager
- 解压,并将解压出的library导入项目中
- 在oncreat中调用initSystemBar方法:
public static void initSystemBar(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
setTranslucentStatus(activity, true);
}
SystemBarTintManager tintManager = new SystemBarTintManager(activity);
tintManager.setStatusBarTintEnabled(true);
// 使用颜色资源-
tintManager.setStatusBarTintResource(R.color.status_color);
//tintManager.setStatusBarAlpha(0.0f);
//还有很多其他方法
}
@TargetApi(19)
private static void setTranslucentStatus(Activity activity, boolean on) {
Window win = activity.getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if (on) {
winParams.flags |= bits;
} else {
winParams.flags &= ~bits;
}
win.setAttributes(winParams);
}