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


90

Googleカレンダーアプリケーションの動作を再現しようとしています。 ここに画像の説明を入力してください

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

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

前もって感謝します

回答:


182

ターゲットにしようとしているAPIレベルはわかりませんが、API 23固有のものを使用できる場合は、AppThemestyles.xmlに次を追加できます。

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

ときandroid:windowLightStatusBarにtrueに設定されているステータスバーの色が白で、その逆も同様際とき、ステータスバーのテキストの色を見ることができるようになるandroid:windowLightStatusBarfalseに設定されているステータスバーの色である場合には、ステータスバーのテキストの色が見られるように設計されます闇。

例:

<!-- 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>

39
私のAPIレベルが21の場合、それは機能していません。その代替手段を教えてください
saikrupa 2017年

8
Api 21の解決策が見つかりました。助けてください。
iMDroid 2018年

2
注:android:windowLightStatusBarにはAPIレベル23(現在の最小値は21)が必要です...(⌘F1)
HardikDarji19年

API 21の場合、これは不可能です。グーグルアプリケーションでは、それは白ではなく黒いバーです。
ヨリス

1
23 <APIレベルのために、この記事を参照してください。stackoverflow.com/questions/49254877/...
バスティバガボンド

31

あなたはこの答えのようにプログラムでそれを行うことができます

これを追加するだけです

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

setSystemUiVisibilityは非推奨です
Luca Ziegler

14

それは非常に簡単です:

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

4

以前と同様に、私の場合は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);
}

2
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//  set status text dark

getWindow().setStatusBarColor(ContextCompat.getColor(MainActivity.this,R.color.colorPrimaryDark));// set status background white

わたしにはできる


これには、APIレベル23以上が必要です。
漢字

2

アクティビティonCreate()メソッドで、次のコードをsetContentView(R.layout.activity_generic_main);

以下にサンプルコードを示します。

public class GenericMain extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_generic_main);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

    }
}

0

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

アクティビティ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-はステータスバーの色です。


2
問題は、ステータスバーの背景ではなく、ステータスバーのテキストの色に関するものです。
漢字

0

スプラッシュページでない場合はこれを試してください

getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getActivity().getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getActivity().getWindow().setNavigationBarColor(ContextCompat.getColor(context, R.color.white));
getActivity().getWindow().setStatusBarColor(ContextCompat.getColor(context, R.color.white));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.