ในการอัปเดตอมยิ้มใหม่ฉันสังเกตเห็นว่าเมื่อใช้แอป Google ดั้งเดิมสีของแถบสถานะจะเปลี่ยนไปเพื่อให้ตรงกับแถบการทำงานบนแอปที่คุณกำลังเรียกใช้ ฉันเห็นมันอยู่ในแอพ Twitter ด้วยดังนั้นฉันเดาว่าไม่ใช่เฉพาะ Google ที่ทำได้
ไม่มีใครรู้วิธีทำถ้าเป็นไปได้?
ในการอัปเดตอมยิ้มใหม่ฉันสังเกตเห็นว่าเมื่อใช้แอป Google ดั้งเดิมสีของแถบสถานะจะเปลี่ยนไปเพื่อให้ตรงกับแถบการทำงานบนแอปที่คุณกำลังเรียกใช้ ฉันเห็นมันอยู่ในแอพ Twitter ด้วยดังนั้นฉันเดาว่าไม่ใช่เฉพาะ Google ที่ทำได้
ไม่มีใครรู้วิธีทำถ้าเป็นไปได้?
คำตอบ:
ในการเปลี่ยนแถบสถานะการใช้สีsetStatusBarColor (สี int) ตาม javadoc เราจำเป็นต้องตั้งค่าสถานะบนหน้าต่างด้วย
ข้อมูลโค้ดที่ใช้งานได้:
Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(ContextCompat.getColor(activity, R.color.example_color));
โปรดทราบว่าสีของแถบสถานะแนวทางการออกแบบวัสดุและสีของแถบการกระทำควรแตกต่างกัน:
ดูภาพหน้าจอด้านล่าง:
getWindow().setStatusBarColor(activity.getResources().getColor(R.color.example_color));
และมันก็ทำงานได้อย่างสมบูรณ์แบบ ไม่แน่ใจเกี่ยวกับบริบทที่แฟล็กจำเป็นอย่างยิ่ง
เพียงเพิ่มสิ่งนี้ในคุณ styles.xml colorPrimary ใช้สำหรับแถบการดำเนินการและ colorPrimaryDark ใช้สำหรับแถบสถานะ
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:colorPrimary">@color/primary</item>
<item name="android:colorPrimaryDark">@color/primary_dark</item>
</style>
ภาพนี้จากนักพัฒนา android อธิบายเพิ่มเติมเกี่ยวกับพาเลทสี สามารถอ่านเพิ่มเติมได้ที่ลิงค์นี้
<color name="colorPrimary">#somecolor</color>
และ<color name="colorPrimaryDark">#somecolor</color>
. สามารถเปลี่ยนแปลงได้เพื่อให้ได้เอฟเฟกต์ที่ต้องการ
วิธีการตั้งค่าสีแถบสถานะหนึ่งคือผ่านstyle.xml
ในการทำเช่นนั้นให้สร้างไฟล์style.xmlภายใต้โฟลเดอร์res / values-v21พร้อมเนื้อหานี้:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="android:Theme.Material">
<!-- darker variant for the status bar and contextual app bars -->
<item name="android:colorPrimaryDark">@color/blue_dark</item>
</style>
</resources>
แก้ไข:ตามที่ระบุไว้ในความคิดเห็นเมื่อใช้ AppCompat รหัสจะแตกต่างกัน ในไฟล์res / values / style.xmlใช้แทน:
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">
<!-- Set AppCompat’s color theming attrs -->
<item name="colorPrimary">@color/my_awesome_red</item>
<item name="colorPrimaryDark">@color/my_awesome_darker_red</item>
<!-- Other attributes -->
</style>
ในการตั้งค่าสีของแถบสถานะให้สร้างไฟล์ style.xml ภายใต้โฟลเดอร์ res / values-v21 ที่มีเนื้อหานี้:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppBaseTheme" parent="AppTheme">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/blue</item>
</style>
</resources>
เพิ่มบรรทัดนี้ในรูปแบบของ v21 หากคุณใช้สองสไตล์
<item name="android:statusBarColor">#43434f</item>
android:windowDrawsSystemBarBackgrounds
นอกจากนี้หากคุณต้องการstatus-bar
สีที่แตกต่างกันสำหรับกิจกรรมที่แตกต่างกัน ( ชิ้นส่วน ) คุณสามารถทำได้โดยทำตามขั้นตอนต่อไปนี้ (ทำงานบน API 21 ขึ้นไป):
ขั้นแรกให้สร้างvalues21/style.xml
และใส่รหัสต่อไปนี้:
<style name="AIO" parent="AIOBase">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowContentTransitions">true</item>
</style>
จากนั้นกำหนดธีมสีขาว | มืดตามที่คุณvalues/style.xml
ต้องการดังต่อไปนี้:
<style name="AIOBase" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/color_primary</item>
<item name="colorPrimaryDark">@color/color_primary_dark</item>
<item name="colorAccent">@color/color_accent</item>
<item name="android:textColorPrimary">@android:color/black</item>
<item name="android:statusBarColor" tools:targetApi="lollipop">@color/color_primary_dark
</item>
<item name="android:textColor">@color/gray_darkest</item>
<item name="android:windowBackground">@color/default_bg</item>
<item name="android:colorBackground">@color/default_bg</item>
</style>
<style name="AIO" parent="AIOBase" />
<style name="AIO.Dark" parent="AIOBase">
<item name="android:statusBarColor" tools:targetApi="lollipop">#171717
</item>
</style>
<style name="AIO.White" parent="AIOBase">
<item name="android:statusBarColor" tools:targetApi="lollipop">#bdbdbd
</item>
</style>
อย่าลืมใช้ธีมในmanifest.xml
ไฟล์.
ในอุปกรณ์ Android Pre Lollipop คุณสามารถทำได้จากSystemBarTintManager หากคุณใช้ android studio เพียงแค่เพิ่ม Systembartint lib ในไฟล์ gradle ของคุณ
dependencies {
compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
...
}
จากนั้นในกิจกรรมของคุณ
// create manager instance after the content view is set
SystemBarTintManager mTintManager = new SystemBarTintManager(this);
// enable status bar tint
mTintManager.setStatusBarTintEnabled(true);
mTintManager.setTintColor(getResources().getColor(R.color.blue));