web-dev-qa-db-ja.com

primaryDarkが白のときにステータスバーのテキストの色を変更する

Googleカレンダーアプリケーションの動作を再現しようとしています: enter image description here

しかし、ステータステキストの色を変更する方法を見つけていません。 colorPrimaryDarkを白に設定すると、アイコンもステータスバーのテキストも表示されず、色も白になります。

ステータスバーのテキストの色を変更する方法はありますか?

前もって感謝します

47
MarcForn

ターゲットとするAPIレベルがわからないが、API 23固有のものを使用できる場合は、AppTheme styles.xmlに以下を追加できます。

<item name="Android:statusBarColor">@color/colorPrimaryDark</item>
<item name="Android:windowLightStatusBar">true</item>

Android:windowLightStatusBarがtrueに設定されている場合、ステータスバーの色が白の場合はステータスバーのテキストの色が表示され、Android:windowLightStatusBarがfalseに設定されている場合はステータスバーのテキストの色が表示されますステータスバーの色が暗いときに見えるように設計されています。

例:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <!-- Status bar stuff. -->
    <item name="Android:statusBarColor">@color/colorPrimaryDark</item>
    <item name="Android:windowLightStatusBar">true</item> 
</style>
86
Jon Liu

このようにプログラムでそれを行うことができます answer

これを追加するだけ

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
14
M.G

それは非常に簡単です:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//  set status text dark
getWindow().setStatusBarColor(ContextCompat.getColor(BookReaderActivity.this,R.color.white));// set status background white

およびその逆:

getWindow().setStatusBarColor(ContextCompat.getColor(BookReaderActivity.this, R.color.black));
View decorView = getWindow().getDecorView(); //set status background black 
decorView.setSystemUiVisibility(decorView.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); //set status text  light
1
Vasily G

以前のように、SYSTEM_UI_FLAG_LIGHT_STATUS_BARが私の場合の作業を行います。API22以上に設定することを忘れないでください。

これをsetContentViewの後にoncreateに追加します。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
1
Maher

これを一度試してください。

アクティビティonCreate()メソッドに、次のコードを貼り付けます。

try {
        if (Android.os.Build.VERSION.SDK_INT >= 21) {
                Window window = getWindow();
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(ContextCompat.getColor(this, R.color.color_red));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

注:color_red-ステータスバーの色です。

0
Surendar D