Android lollipop เปลี่ยนสีของแถบนำทาง


137

ในแอพของฉันฉันต้องเปลี่ยนสีแถบนำทางด้านล่าง ฉันดูโพสต์มากมาย แต่ไม่พบวิธีแก้ปัญหา ฉันใช้ไลบรารี appCompat

ป้อนคำอธิบายภาพที่นี่

V21 / styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light">
       <item name="android:windowBackground">@drawable/bgpreview</item>
       <item name="android:colorPrimary">@color/MyColor</item>
       <item name="android:colorPrimaryDark">@color/MyColor</item>
       <item name="android:windowContentOverlay">@null</item>
       <item name="android:textColorPrimary">@color/MyColor</item>
       <item name="colorAccent">@color/MyColor</item>
       <!-- darker variant for the status bar and contextual app bars -->
       <item name="android:windowContentTransitions">true</item>
       <item name="android:windowAllowEnterTransitionOverlap">true</item>
       <item name="android:windowAllowReturnTransitionOverlap">true</item>
       <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
       <item name="android:windowSharedElementExitTransition">@android:transition/move</item>

       <item name="windowActionBar">false</item>
       <item name="android:textAllCaps">false</item>

</style>

คุณสามารถโพสต์ไฟล์ style.xml ได้ไหม ไม่ใช่เรื่องทั้งหมด เพียงตัวอย่างที่เกี่ยวข้อง
Blackbelt

ฉันจะตั้งค่าสีเริ่มต้นได้อย่างไร?
GMX

คำตอบ:


262

สามารถทำได้ภายในstyles.xmlโดยใช้

<item name="android:navigationBarColor">@color/theme_color</item>

หรือ

window.setNavigationBarColor(@ColorInt int color)

http://developer.android.com/reference/android/view/Window.html#setNavigationBarColor(int)

โปรดทราบว่าวิธีนี้ได้รับการแนะนำใน Android Lollipop และจะใช้ไม่ได้กับเวอร์ชัน API <21

วิธีที่สอง (ใช้ได้กับ KitKat) คือการตั้งค่า windowTranslucentNavigation เป็น true ในรายการและวางมุมมองที่เป็นสีไว้ใต้แถบนำทาง


ขอบคุณ. ฉันเพิ่มโค้ดรูปแบบของฉัน <item name = "android: navigationBarColor"> @ color / MyColor </item> และใช้งานได้แล้ว
user3065901

31
มีวิธีเปลี่ยนเป็นสีของไอคอนด้วยหรือไม่?
Jamsheed Kamarudeen

10
<item name="android:navigationBarColor">@color/theme_color</item>เพิ่มในvalues-21โฟลเดอร์
Pratik Butani

ตรวจสอบให้แน่ใจว่า (Target Android Version) ตั้งค่าเป็นAPI 21 เป็น
MujtabaFR

2
อย่าใส่สิ่งนี้ในไฟล์สไตล์ของคุณ<item name="android:windowDrawsSystemBarBackgrounds">false</item>มิฉะนั้นการระบายสีแถบระบบจะไม่ทำงาน
Alexey Ozerov

70

นี่คือวิธีการทำโดยใช้โปรแกรม:

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {                
   getWindow().setNavigationBarColor(getResources().getColor(R.color.your_awesome_color));
}

การใช้ห้องสมุด Compat:

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.primary));
}

นี่คือวิธีดำเนินการกับ xml ในโฟลเดอร์ values-v21 / style.xml:

<item name="android:navigationBarColor">@color/your_color</item>

1
นี่เป็นตัวเลือกที่แปลก! ฉันมีแอพที่ทำให้ navbar เป็นสีดำพร้อมปุ่มสีดำทำให้ไม่เห็นปุ่มโฮม / ย้อนกลับ / ล่าสุด ...
JohnyTex

37

วิธีเปลี่ยนสีของแถบนำทางมีดังนี้

โดย XML

1- ค่า -v21 / style.xml

<item name="android:navigationBarColor">@color/navigationbar_color</item>

หรือถ้าคุณต้องการทำโดยใช้ค่า / โฟลเดอร์เท่านั้น -

2- ค่า / style.xml

<resources xmlns:tools="http://schemas.android.com/tools">

<item name="android:navigationBarColor" tools:targetApi="21">@color/navigationbar_color</item>

นอกจากนี้คุณยังสามารถเปลี่ยนสีแถบนำทางโดยการเขียนโปรแกรม

 if (Build.VERSION.SDK_INT >= 21)
    getWindow().setNavigationBarColor(getResources().getColor(R.color.navigationbar_color));

โดยใช้ Compat Library-

if (Build.VERSION.SDK_INT >= 21) {
    getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.primary));
}

โปรดดูลิงค์สำหรับรายละเอียดเพิ่มเติม - http://developer.android.com/reference/android/view/Window.html#setNavigationBarColor(int)


ฉันไม่สามารถใช้tools:targetApi? ฟังก์ชันนี้ล้าสมัยหรือไม่
winklerrr

1
@winklerrr มันไม่ล้าสมัยดูคำตอบที่อัปเดตของฉัน
D_Alpha

หากฉันตัดสินใจที่จะเปลี่ยนสีโดยทางโปรแกรม - ฉันจำเป็นต้องทำสิ่งนี้ในแต่ละActivity/ Fragmentหรือไม่ หรือมีสถานที่ที่แน่นอนที่ฉันควรทำ? อาจจะอยู่ในชั้นเรียนที่ขยายApplication?
winklerrr

1
คุณต้องทำสิ่งนี้ในแต่ละกิจกรรมหรือคุณสามารถสร้างรูปแบบที่แตกต่างกันสำหรับกิจกรรมที่แตกต่างกัน
D_Alpha

ไม่จำเป็นต้องลบล้างstyles.xmlในขณะใช้tools:targetApi
Farshad Tahmasbi


2
  1. สร้างสีดำ: <color name="blackColorPrimary">#000001</color> (not #000000)
  2. เขียนอย่างมีสไตล์: <item name="android:navigationBarColor" tools:targetApi="lollipop">@color/blackColorPrimary</item>

ปัญหาคือ Android เวอร์ชันที่สูงกว่าสร้าง trasparent สำหรับ # 000000


หากคุณทำทุกอย่างถูกต้องและยังไม่ได้ผลนี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน ดูเหมือนจะไม่มีการกล่าวถึงที่อื่นว่า # 000000 จะใช้ไม่ได้
Matija Martic

1

คุณยังสามารถแก้ไขธีมของคุณโดยใช้ตัวแก้ไขธีมโดยคลิก:

เครื่องมือ -> Android -> ตัวแก้ไขธีม

จากนั้นคุณไม่จำเป็นต้องใส่เนื้อหาเพิ่มเติมในไฟล์. xml หรือ. class ของคุณ


เคล็ดลับที่ดี! สำหรับฉันมันอยู่ภายใต้เครื่องมือ -> ตัวแก้ไขธีม
Sam

ตอนนี้ Theme Editor เริ่มต้นด้วย 3.3
Jenix

0

คุณสามารถเปลี่ยนได้โดยตรงในไฟล์styles.xml \ app \ src \ main \ res \ values ​​\ styles.xml

งานนี้กับเวอร์ชันเก่าฉันกำลังเปลี่ยนใน KitKat และมาที่นี่

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