เปลี่ยนสีข้อความในแถบสถานะเมื่อ primaryDark เป็นสีขาว


90

ฉันพยายามทำซ้ำลักษณะการทำงานของแอปพลิเคชัน Google ปฏิทิน: ป้อนคำอธิบายภาพที่นี่

แต่ฉันไม่พบวิธีเปลี่ยนสีข้อความสถานะ หากฉันตั้งค่า colorPrimaryDark เป็นสีขาวฉันไม่สามารถมองเห็นไอคอนทั้งข้อความของแถบสถานะเนื่องจากสีของมันเป็นสีขาวเช่นกัน

มีวิธีใดในการเปลี่ยนสีข้อความของแถบสถานะหรือไม่?

ขอบคุณล่วงหน้า

คำตอบ:


182

ฉันไม่แน่ใจว่า API ของคุณพยายามกำหนดเป้าหมายไว้ที่ระดับใด แต่หากคุณสามารถใช้สิ่งที่เฉพาะเจาะจงของ API 23 ได้คุณสามารถเพิ่มสิ่งต่อไปนี้ใน AppTheme styles.xml ของคุณ:

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

เมื่อandroid:windowLightStatusBarตั้งค่าเป็นจริงสีข้อความของแถบสถานะจะสามารถมองเห็นได้เมื่อสีของแถบสถานะเป็นสีขาวและในทางกลับกันเมื่อandroid:windowLightStatusBarตั้งค่าเป็นเท็จสีข้อความของแถบสถานะจะได้รับการออกแบบให้มองเห็นได้เมื่อสีของแถบสถานะเป็น มืด

ตัวอย่าง:

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

8
พบโซลูชันใด ๆ สำหรับ Api 21 โปรดช่วย?
iMDroid

2
หมายเหตุ: android: windowLightStatusBar ต้องการ API ระดับ 23 (ขั้นต่ำปัจจุบันคือ 21) เพิ่มเติม ... (⌘F1)
Hardik Darji

สำหรับ api 21 นี่เป็นไปไม่ได้ ในแอปพลิเคชัน Google จะเป็นแถบสีดำแทนที่จะเป็นสีขาว
Joris

1
ดูโพสต์นี้สำหรับ API ระดับ <23: stackoverflow.com/questions/49254877/…
Basti Vagabond

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 ทำงานในกรณีของฉันอย่าลืมตั้งค่าให้สูงกว่า API 22

เพิ่มสิ่งนี้เพื่อ oncreate หลังจาก setContentView:

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.