第一種方法:透過styles.xml,<item name="android:windowLightStatusBar">true</item>
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<resources> | |
<!-- Base application theme. --> | |
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> | |
<!-- Customize your theme here. --> | |
<item name="colorPrimary">@color/colorPrimary</item> | |
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> | |
<item name="colorAccent">@color/colorAccent</item> | |
<!-- 使用LightStatusBarMode --> | |
<item name="android:windowLightStatusBar">true</item> | |
</style> | |
</resources> |
第二種方法:透過SYSTEM_UI_FLAG_LIGHT_STATUS_BAR,由程式端改變顏色
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { | |
int flags = getWindow().getDecorView().getSystemUiVisibility(); | |
flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; | |
getWindow().getDecorView().setSystemUiVisibility(flags); | |
} | |
} |
完成圖↓
MainActivity.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.solinari.statusbarlightmode; | |
import android.os.Build; | |
import android.support.v7.app.AppCompatActivity; | |
import android.os.Bundle; | |
import android.view.View; | |
import android.widget.Button; | |
import android.widget.Toast; | |
public class MainActivity extends AppCompatActivity { | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
Button btnChangeStatusBar = (Button) findViewById(R.id.btnChangeStatusBar); | |
btnChangeStatusBar.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View view) { | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { | |
int flags = getWindow().getDecorView().getSystemUiVisibility(); | |
if(flags != 8192){//8192為SYSTEM_UI_FLAG_LIGHT_STATUS_BAR的值 | |
flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;//淺色背景搭配灰色文字、圖示 | |
getWindow().setStatusBarColor(getResources().getColor(R.color.lightStatus,null)); | |
} | |
else{ | |
flags = 0;//深色背景搭配預設(白色)文字、圖示 | |
getWindow().setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark,null)); | |
} | |
getWindow().getDecorView().setSystemUiVisibility(flags); | |
} | |
else{//版本低於Android 6.0時,出現提示訊息 | |
Toast.makeText(MainActivity.this,"This version is not supported !",Toast.LENGTH_LONG).show(); | |
} | |
} | |
}); | |
} | |
} |
Android 6.0狀態欄使用灰色文字與圖示
Android M Light and Dark status bar programmatically
完整專案:Solinari GitHub