android 适配不同版本的状态栏
时间: 2023-05-29 10:04:25 浏览: 257
Android状态栏的适配汇总
Android系统从5.0开始引入了Material Design风格,其中一个重要的改变是状态栏的颜色和样式。在之前的版本中,状态栏通常是黑色的,而在Material Design中,状态栏可以根据应用程序的主题颜色进行定制化。因此,我们需要在不同的Android版本上适配状态栏。
在Android 5.0及以上版本中,我们可以使用以下代码来实现状态栏颜色的定制:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(ContextCompat.getColor(this, R.color.status_bar_color));
}
```
在Android 4.4及以下版本中,我们可以通过设置一个透明的状态栏来模拟状态栏颜色:
```java
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
ViewGroup decorView = (ViewGroup) window.getDecorView();
int statusBarHeight = getStatusBarHeight();
View statusBarView = new View(this);
statusBarView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight));
statusBarView.setBackgroundColor(ContextCompat.getColor(this, R.color.status_bar_color));
decorView.addView(statusBarView);
ViewGroup rootView = (ViewGroup) ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);
rootView.setFitsSystemWindows(true);
rootView.setClipToPadding(true);
}
```
其中,`getStatusBarHeight()`方法可以获取状态栏的高度。
在Android 6.0及以上版本中,状态栏的颜色还可以与应用程序的主题颜色进行匹配。我们可以在`styles.xml`中定义一个`colorPrimaryDark`属性来指定状态栏颜色:
```xml
<item name="colorPrimaryDark">@color/status_bar_color</item>
```
在代码中,我们可以通过以下方式来设置主题:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.colorPrimaryDark));
}
```
阅读全文