สีของไอคอนแถบสถานะ Android


131

ฉันสงสัยว่าเป็นไปได้ไหมที่จะเปลี่ยนสีไอคอนแถบสถานะ( ไม่ใช่สีของแถบสถานะcolorPrimaryDark) ใส่คำอธิบายภาพที่นี่ สมมติว่าฉันต้องการแถบสถานะนี้ด้วย:
<item name="colorPrimaryDark">@android:color/white</item>

และไอคอนเป็นสีดำเป็นไปได้ไหม?

ขอบคุณ

แก้ไข:

ใหม่ในตัวอย่างนักพัฒนา M: windowLightStatusBar การพลิกสิ่งนี้ในธีมของคุณจะบอกให้ระบบใช้ฉากหน้ามืดซึ่งมีประโยชน์สำหรับแถบสถานะที่มีสีอ่อนกว่า โปรดทราบว่าการแสดงตัวอย่าง M ดูเหมือนจะมีข้อบกพร่องโดยที่ไอคอนการแจ้งเตือนยังคงเป็นสีขาวในขณะที่ไอคอนสถานะของระบบจะเปลี่ยนเป็นสีดำแบบกึ่งโปร่งใสอย่างถูกต้อง

จาก: Roman Nurik โพสต์ Google+ ใส่คำอธิบายภาพที่นี่

คำตอบ:


24

ไม่ใช่ตั้งแต่ Lollipop เริ่มต้นด้วย Android 5.0 หลักเกณฑ์กล่าวว่า:

ไอคอนการแจ้งเตือนต้องเป็นสีขาวทั้งหมด

แม้ว่าจะไม่เป็นเช่นนั้นระบบจะพิจารณาเฉพาะช่องอัลฟาของไอคอนของคุณโดยแสดงเป็นสีขาว

วิธีแก้ปัญหา

วิธีเดียวที่จะมีไอคอนสีบน Lollipop คือการลดtargetSdkVersionค่าเป็นค่าของคุณ<21แต่ฉันคิดว่าคุณควรทำตามหลักเกณฑ์และใช้ไอคอนสีขาวเท่านั้น

หากคุณยังตัดสินใจว่าต้องการไอคอนสีคุณสามารถใช้เมธอดDrawableCompat.setTintจากไลบรารีสนับสนุน v4 ใหม่


3
ฉันทำการค้นหาโดย Google และฉันไม่พบวิธีที่เหมาะสมในการดำเนินการนี้ แต่หากหลักเกณฑ์ของ Android บอกว่าไอคอนต้องเป็นสีขาวแสดงว่าเป็นสีขาว :) ขอบคุณ!
GuilhE

11
จะต้องมีวิธีแก้ปัญหาที่ดีกว่านี้ มีแอพเชิงพาณิชย์หลายตัวที่ใช้สี นี่เป็นการออกแบบที่แปลกประหลาดอย่างน่ากลัวโดย Google พวกเขากำลังคิดอะไรอีกครั้งถ้าเป็นเช่นนั้น?
not2qubit

หากคุณดูแอปข่าวสารของ Google จะไม่มีไอคอนแถบสถานะสีขาว: play.google.com/store/apps/…
Adam Hurwitz

6
<item name="android:windowLightStatusBar">true</item>ทำงานให้ฉัน
Adam Hurwitz

ฉันสงสัยว่าทำไมแอป Gmail (เปิดตัวในปี 2019) จึงทำให้แถบสถานะเป็นสีขาวและไอคอน / ข้อความเป็นสีเทา
Daniel F

201

ใช่เป็นไปได้ที่จะเปลี่ยนเป็นสีเทา (ไม่มีสีที่กำหนดเอง) แต่ใช้ได้เฉพาะกับ API 23 ขึ้นไปเท่านั้นคุณต้องเพิ่มสิ่งนี้ในค่า -v23 / styles.xml ของคุณ

<item name="android:windowLightStatusBar">true</item>

ใส่คำอธิบายภาพที่นี่


2
แต่ไอคอนรายการเมนูยังคงเป็นสีขาวจะเปลี่ยนสีไอคอนรายการเมนูเป็นสีดำได้อย่างไร?
Mateen Chaudhry

107

@eOnOe ได้ตอบว่าเราจะเปลี่ยนสีแถบสถานะผ่าน xml ได้อย่างไร แต่เราสามารถเปลี่ยนได้แบบไดนามิกในโค้ด:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    View decor = getWindow().getDecorView();
    if (shouldChangeStatusBarTintToDark) {
        decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
    } else {
        // We want to change tint color to white again.
        // You can also record the flags in advance so that you can turn UI back completely if
        // you have set other flags before, such as translucent or full screen.
        decor.setSystemUiVisibility(0);
    }
}

ทางออกที่ดี! เหมาะกับแอปพลิเคชันของฉันมากเพราะฉันไม่ต้องเปลี่ยนเวอร์ชัน SDK
Vitor Braga

2
ถูกต้องมากขึ้น: decorView.setSystemUiVisibility (decorView.getSystemUiVisibility () | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
Anton Savenok

วันนี้ช่วยฉันไว้! ขอบคุณ @ywwynm!
ReGaSLZR

นี่เป็นทางออกที่ดีที่สุดและใช้ได้กับโทรศัพท์ MI คุณเป็นผู้กอบกู้!
Numanqmr

ShouldChangeStatusBarTintDark คืออะไร ??
Ibramazin

48

หากคุณมีระดับ API น้อยกว่า 23 คุณต้องใช้ด้วยวิธีนี้ มันทำงานให้ฉันประกาศนี้อยู่ภายใต้V21 / สไตล์

<item name="colorPrimaryDark" tools:targetApi="23">@color/colorPrimary</item>
        <item name="android:windowLightStatusBar" tools:targetApi="23">true</item>

1
คุณหมายถึง 23. :(
meditat

ไม่ฉันหมายถึง v21 / สไตล์หากคุณไม่ทราบเกี่ยวกับเรื่องนั้นโปรดไปที่ลิงค์นี้ stackoverflow.com/questions/28465064/creating-styles-v21-xml
Ritesh

แม้ว่าจะวางไว้ใน styles.xml ที่มีคุณสมบัติ v21 แต่ก็ใช้ได้เฉพาะกับอุปกรณ์ที่ใช้ API 23 ขึ้นไป ในความเป็นจริง AS Lint เน้นรายการเหล่านี้พร้อมคำเตือนว่าจะถูกละเว้นในเวอร์ชัน Android ที่ไม่รองรับ tools:targetApi="23"ส่วนหนึ่งบอกผ้าสำลีเพื่อให้การปราบปรามคำเตือนนี้
Subaru Tashiro

5

การตั้งค่า windowLightStatusBartrueไม่ให้ใช้งานกับโทรศัพท์ Mi, โทรศัพท์ Meizu บางรุ่น, โทรศัพท์ Blackview, WileyFox เป็นต้นฉันพบการแฮ็กดังกล่าวสำหรับอุปกรณ์ Mi และ Meizu นี่ไม่ใช่วิธีแก้ปัญหาที่ครอบคลุม แต่อาจเป็นประโยชน์กับใครบางคน

และฉันคิดว่ามันจะเป็นการดีกว่าที่จะบอกลูกค้าของคุณว่าแถบสถานะสี (เช่น) สีขาว - ไม่ใช่ความคิดที่ดี แทนที่จะใช้แฮ็กต่างๆจะเป็นการดีกว่าที่จะกำหนดความเหมาะสมcolorPrimaryDarkตามหลักเกณฑ์


-3

ใช่คุณสามารถเปลี่ยนได้ แต่ใน api 22 ขึ้นไปโดยใช้ NotificationCompat.Builder และ setColorized (true):

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, context.getPackageName())
                .setContentTitle(title)
                .setContentText(message)
                .setSmallIcon(icon, level)
                .setLargeIcon(largeIcon)
                .setContentIntent(intent)
                .setColorized(true)
                .setDefaults(0)
                .setCategory(Notification.CATEGORY_SERVICE)
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                .setPriority(NotificationCompat.PRIORITY_HIGH);

คุณแน่ใจไหม? เอกสารระบุว่า "เมื่อตั้งค่าแล้วชุดสีที่มี setColor (int) จะใช้เป็นสีพื้นหลังของการแจ้งเตือนนี้" และ "สำหรับรูปแบบส่วนใหญ่การระบายสีจะถูกนำไปใช้ก็ต่อเมื่อการแจ้งเตือนนั้นเป็นการแจ้งเตือนบริการเบื้องหน้าเท่านั้น" ดูเหมือนว่าจะไม่สามารถเปลี่ยนสีพื้นหน้าของไอคอนได้
Dominique

ใช้สำหรับการแจ้งเตือนเบื้องหน้าเท่านั้นและใช้กับรายการแจ้งเตือนเท่านั้นไม่ใช่ไอคอนการแจ้งเตือน
Subaru Tashiro
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.