480

Trước hết, nó không phải là một bản sao như trong Cách thay đổi màu nền của thanh trạng thái android

Làm cách nào để thay đổi màu thanh trạng thái giống như trong thanh điều hướng.

Tôi muốn màu thanh trạng thái giống với màu thanh điều hướng

Làm cách nào để thay đổi màu thanh trạng thái trong Android?

|
  • 2
    nó có thể chỉ sau khi kitkat @MarkBuikema –  09:21:28 05/03/2014
  • 6
    Như Niels gợi ý, có MỘT PHÂN PHỐI CHỦ ĐỀ kể từ phiên bản v21 được gọi android:statusBarColor. Bạn chỉ cần thêm nó vào values-v21/styles.xml. –  16:00:18 08/11/2016
  • @MarkBuikema Điều đó thậm chí còn liên quan đến quyền truy cập root! –  08:28:23 14/02/2019
699

Android 5.0 Lollipop đã giới thiệu chủ đề Material Design tự động tô màu thanh trạng thái dựa trên colorPrimaryDarkgiá trị của chủ đề.

Điều này được hỗ trợ trên thiết bị pre-lollipop nhờ vào thư viện support-v7-appcompat bắt đầu từ phiên bản 21. Bài đăng trên blog về hỗ trợ appcompat v21 từ Chris Banes

Làm cách nào để thay đổi màu thanh trạng thái trong Android?

Đọc thêm về Chủ đề Material trên trang web Nhà phát triển Android chính thức

|
  • 1
    trong một số lý do thuộc tính colorPrimaryDark không hoạt động đối với tôi. thử trên giả lập v21 –  20:21:01 19/10/2014
  • 1
    Nó hoạt động bạn có để xem những thay đổi trên giả lập không nằm trong bản xem trước bố cục [nó không hiển thị có] –  10:37:00 29/10/2014
  • 1
    colorPrimaryDark cũng không hoạt động đối với tôi trên trình giả lập API 18. Từ bài viết được liên kết về appcompat: "Trên các nền tảng cũ hơn, AppCompat mô phỏng chủ đề màu sắc nếu có thể. Hiện tại, điều này chỉ giới hạn ở việc tô màu thanh tác vụ và một số tiện ích." –  22:15:22 03/02/2015
  • 1
    Còn việc thay đổi màu phông chữ trên thanh trạng thái thì sao? Các tài liệu không nói bất cứ điều gì về điều đó. –  16:21:06 07/08/2015
  • 1
    Tôi đã thử theo cùng một cách. nó hoạt động hoàn hảo trong hầu hết tất cả các thiết bị, nhưng tôi có samsung galaxy s4 chạy hệ điều hành 5.0.1 và trên thanh trạng thái của điện thoại này màu đen. Và khi tôi đi đến một hoạt động khác và quay lại hoạt động trước đó, màu thanh trạng thái của tôi sẽ được thay đổi thành màu chủ đề ứng dụng. Bất kỳ lý do tại sao điều này đang xảy ra –  05:06:20 09/09/2016
400

Cập nhật:

Kẹo mút:

public abstract void setStatusBarColor (int color)

Đã thêm vào API cấp 21

Android Lollipop mang theo khả năng thay đổi màu sắc của thanh trạng thái trong ứng dụng của bạn để có trải nghiệm người dùng phong phú hơn và phù hợp với Google Material Design Guidelines.

Đây là cách bạn có thể thay đổi màu của thanh trạng thái bằng window.setStatusBarColorphương pháp mới được giới thiệu trong API level 21.

Thay đổi màu sắc của thanh trạng thái cũng yêu cầu thiết lập hai cờ bổ sung trên Cửa sổ; bạn cần thêm FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDScờ và xóa FLAG_TRANSLUCENT_STATUScờ.

Mã làm việc:

import android.view.Window;

...

Window window = activity.getWindow();

// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

// finally change the color
window.setStatusBarColor(ContextCompat.getColor(activity,R.color.my_statusbar_color));

Tham khảo nhà phát triển ngoại tuyến: setStatusBarColor (int)

Ví dụ: material-design-mọi nơi

Chris Banes Blog- appcompat v21: material design cho các thiết bị tiền Lollipop!

Làm cách nào để thay đổi màu thanh trạng thái trong Android?

Đối transitionNamevới nền chế độ xem sẽ là android:status:background.

|
  • 1
    Bất kỳ giải pháp nào cho khả năng tương thích ngược? –  23:13:38 17/04/2017
  • 1
    Như đã đề cập trong câu trả lời của Niels: bạn cũng có thể cấu hình màu sắc thanh trạng thái thông qua chủ đề / phong cách bằng cách thiết lập android:statusBarColortrong của bạn values-v21/styles.xmltập tin mỗi androiddocs.com/training/material/theme.html như vậy<item name="android:statusBarColor">@color/primary_color</item> –  15:33:10 17/12/2018
  • 1
    Tôi có thể thay đổi màu thanh trạng thái thành màu trắng, nhưng tôi không thể nhìn thấy biểu tượng thông báo như batery, làm cách nào để giải quyết vấn đề này? –  10:28:19 24/07/2019
245

Đặt đây là giá trị của bạn-v21 / styles.xml, để bật tính năng này trên Lollipop:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_secondary</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:statusBarColor">@color/color_primary</item>
    </style>
</resources>
|
50

đây là cách rất dễ dàng để thực hiện việc này mà không cần bất kỳ Thư viện nào: nếu phiên bản hệ điều hành không được hỗ trợ - theo kitkat - thì không có gì xảy ra. tôi thực hiện các bước sau:

  1. trong xml của tôi, tôi đã thêm vào đầu Chế độ xem này:
<View
        android:id="@+id/statusBarBackground"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

sau đó tôi thực hiện phương pháp này:

 public void setStatusBarColor(View statusBar,int color){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
           Window w = getWindow();
           w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
           //status bar height
           int actionBarHeight = getActionBarHeight();
           int statusBarHeight = getStatusBarHeight();
           //action bar height
           statusBar.getLayoutParams().height = actionBarHeight + statusBarHeight;
           statusBar.setBackgroundColor(color);
     }
}

Ngoài ra, bạn cần cả hai phương pháp đó để có được chiều cao của Thanh hành động và thanh trạng thái:

public int getActionBarHeight() {
    int actionBarHeight = 0;
    TypedValue tv = new TypedValue();
    if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
    {
       actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
    }
    return actionBarHeight;
}

public int getStatusBarHeight() {
    int result = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

thì điều duy nhất bạn cần là dòng này để đặt màu thanh trạng thái:

setStatusBarColor(findViewById(R.id.statusBarBackground),getResources().getColor(android.R.color.white));
|
  • 1
    tôi nên đặt phần tử khung nhìn ở đâu? nó có nên ở trên cùng của bố cục chính không? –  07:05:18 21/01/2015
  • 1
    Đúng. Trong xml của bạn. Ở trên cùng của nó. –  07:36:32 21/01/2015
  • 1
    Thận trọng: Chỉ hoạt động với API android> = 19. Trong trường hợp của tôi, tôi cần sự hỗ trợ bắt đầu từ 16 –  12:03:23 30/06/2015
  • 1
    setStatusBarColor (findViewById (android.R.id.statusBarBackground), getResources (). getColor (android.R.color.white)); –  05:36:30 02/08/2015
44

Đối với các nhà phát triển Java:

Như @Niels đã nói bạn phải đặt giá trị-v21 / styles.xml:

<item name="android:statusBarColor">@color/black</item>

Nhưng thêm tools:targetApi="lollipop"nếu bạn muốn styles.xml đơn lẻ, như:

<item name="android:statusBarColor" tools:targetApi="lollipop">@color/black</item>

Đối với các nhà phát triển Kotlin:

window.statusBarColor = ContextCompat.getColor(this, R.color.color_name)
|
  • 1
    Cảm ơn rất nhiều cho "targetApi". Tôi không thích chủ đề của mình trải rộng trên nhiều tệp. :) –  11:03:20 21/01/2019
39

Bạn có thể sử dụng mã đơn giản này:

Một lớp lót trong Kotlin:

window.statusBarColor = ContextCompat.getColor(this, R.color.colorName)

Câu trả lời ban đầu với Java và kiểm tra phiên bản thủ công:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().setStatusBarColor(getResources().getColor(R.color.colorAccentDark_light, this.getTheme()));
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().setStatusBarColor(getResources().getColor(R.color.colorAccentDark_light));
}
|
  • 1
    Bạn có thể đơn giản hóa điều này hơn nữa bằng cách sử dụng ContextCompat. Trong Kotlin sau đó nó chỉ là thế này:window.statusBarColor = ContextCompat.getColor(this, R.color.colorName) –  18:38:57 21/05/2019
  • 1
    Do thời gian tôi đã viết nó, tôi đã không cố gắng kotlin.Why Bạn không thể chỉnh sửa câu trả lời và tôi có thể chấp nhận nó :) –  19:32:58 21/05/2019
  • 1
    Ý tưởng tốt. Tôi đã bao gồm đề nghị của tôi trong câu trả lời như một tài liệu tham khảo dễ dàng cho du khách trong tương lai –  20:23:40 21/05/2019
  • 1
    Màu thanh trạng thái đã thay đổi ở trên Build.VERSION_CODES.M. không làm việc dưới Lollipop –  05:58:39 26/01/2020
  • 1
    @MuhammedHaris nó không hoạt động. Bạn sử dụng mã kotlin hay java? –  11:37:36 16/03/2020
33

Để thay đổi màu cho lolipop ở trên, chỉ cần thêm cái này vào styles.xml của bạn

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

nhưng hãy nhớ , nếu bạn muốn có màu sáng cho thanh trạng thái, hãy thêm dòng này

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

Chà, giải pháp Izhar là OK nhưng cá nhân tôi đang cố gắng tránh khỏi mã trông như thế này:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//Do what you need for this SDK
};

Ngoài ra, tôi cũng không thích trùng lặp mã. Trong câu trả lời của bạn, tôi phải thêm dòng mã như vậy trong tất cả các Hoạt động:

setStatusBarColor(findViewById(R.id.statusBarBackground),getResources().getColor(android.R.color.white));

Vì vậy, tôi đã sử dụng giải pháp Izhar và sử dụng XML để nhận được kết quả tương tự: Tạo bố cục cho StatusBar status_bar.xml

<View xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="@dimen/statusBarHeight"
     android:background="@color/primaryColorDark"
     android:elevation="@dimen/statusBarElevation">

Lưu ý các thuộc tính độ cao và độ cao, các thuộc tính này sẽ được đặt trong các giá trị, giá trị-v19, giá trị-v21 thấp hơn nữa.

Thêm bố cục này vào bố cục hoạt động của bạn bằng cách sử dụng include, main_activity.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/Black" >

<include layout="@layout/status_bar"/>
<include android:id="@+id/app_bar" layout="@layout/app_bar"/>
//The rest of your layout       
</RelativeLayout>

Đối với Thanh công cụ, hãy thêm thuộc tính lề trên cùng:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:background="@color/primaryColor"
app:theme="@style/MyCustomToolBarTheme"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
android:elevation="@dimen/toolbarElevation"
android:layout_marginTop="@dimen/appBarTopMargin"
android:textDirection="ltr"
android:layoutDirection="ltr">

Trong appTheme style-v19.xml và styles-v21.xml, hãy thêm windowTranslucent attr:

styles-v19.xml, v21:

<resources>
<item name="android:windowTranslucentStatus">true</item>
</resources>

Và cuối cùng, trên kích thước của bạn, kích thước v19, kích thước v21, thêm các giá trị cho Thanh công cụ topMargin và chiều cao của statusBarHeight: kích thước.xml nhỏ hơn KitKat:

<resources>
<dimen name="toolbarElevation">4dp</dimen>
<dimen name="appBarTopMargin">0dp</dimen>
<dimen name="statusBarHeight">0dp</dimen>
</resources>

Chiều cao thanh trạng thái luôn là 24dpmens-v19.xml cho KitKat trở lên:

<resources>
<dimen name="statusBarHeight">24dp</dimen>
<dimen name="appBarTopMargin">24dp</dimen>
</resources>

mens-v21.xml cho Lolipop, chỉ cần thêm độ cao nếu cần:

<resources>
<dimen name="statusBarElevation">4dp</dimen>
</resources>

Đây là kết quả cho Jellybean KitKat và Lollipop:

Làm cách nào để thay đổi màu thanh trạng thái trong Android?

|
  • 1
    Vì vậy, thay vì đặt mã kiểm tra, bạn đã đặt nó trong XML. Giải pháp của bạn sẽ hoạt động trên Kitkat, giống như những gì anh ấy có. –  08:39:47 14/03/2018
23

Chỉ cần tạo một chủ đề mới trong res / values ​​/ styles.xml nơi bạn thay đổi "colorPrimaryDark" là màu của thanh trạng thái:

<style name="AppTheme.GrayStatusBar" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimaryDark">@color/colorGray</item>
</style>

Và sửa đổi chủ đề hoạt động trong AndroidManifest.xml thành chủ đề bạn muốn, vào hoạt động tiếp theo, bạn có thể thay đổi màu trở lại màu ban đầu bằng cách chọn chủ đề gốc:

<activity
    android:name=".LoginActivity"
    android:theme="@style/AppTheme.GrayStatusBar" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Đây là cách res / values ​​/ Colors.xml của bạn sẽ trông như thế nào:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#c6d6f0</color>
    <color name="colorGray">#757575</color>
</resources>
|
  • 1
    Tôi nghĩ đây là giải pháp đơn giản nhất nhưng sạch sẽ nhất. Không cần phải có cấp API tối thiểu là 21 , chỉ cần ghi đè đơn giản. Cần nhiều phiếu bầu hơn. –  17:45:44 10/08/2018
  • 1
    Điều này không hoạt động khi chạy trên Nougat và cấp api được đặt thành 19. Nó hoạt động nếu tôi đặt android: theme dưới nút ứng dụng trong tệp kê khai. –  08:44:46 16/05/2019
17

Bạn có thể thay đổi màu thanh trạng thái bằng chức năng này. hoạt động trên android L có nghĩa là API 21 trở lên và cần một chuỗi màu chẳng hạn như "#ffffff".

private void changeStatusBarColor(String color){
    if (Build.VERSION.SDK_INT >= 21) {
        Window window = getWindow();
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(Color.parseColor(color));
    }
}
|
  • 1
    Không hoạt động trên Android 7 –  16:32:20 03/12/2020
  • 1
    Xin chào @Naga Tôi đã thử nghiệm nó trên Android 7 và nó hoạt động! –  01:21:34 04/12/2020
  • 1
    @Naga Vui lòng cung cấp thêm thông tin về điều này nhờ –  01:21:53 04/12/2020
  • 1
    Xin lỗi xấu của tôi, tôi đã thử nghiệm trên Android 9 và nó đã không làm việc, làm việc của mình vào ngày 7 –  13:38:08 05/12/2020
  • 1
    Xin chào @Naga Tôi đã thử nghiệm trên Android 9 và nó hoạt động tốt! –  05:56:45 06/12/2020
15

Để thay đổi màu của thanh trạng thái, hãy chuyển đến res/values-v21/styles.xmlmàu của thanh trạng thái

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_secondary</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:statusBarColor">#0000FF</item>
    </style>
</resources>
|
  • 1
    Này, bạn có thể giúp tôi được không? Tôi không biết gì về Android và tôi không thể bắt đầu học ngay bây giờ. Tôi có một phù thủy ứng dụng đơn giản chạy một tệp html. Tôi đang cố gắng thay đổi màu thanh trạng thái vì phần trên và dưới cùng trên # 000 rất kinh khủng đối với khẩu trang của tôi. Nhưng tôi không thể, tôi thậm chí không thể tìm thấy tệp styles.xml ... Nếu tôi có thể gửi cho bạn apk của tôi và bạn đặt nó cho tôi, tôi sẽ rất biết ơn! –  21:34:58 28/04/2020
15

Tôi có yêu cầu này: Thay đổi theo chương trình màu thanh trạng thái để giữ nó trong suốt , để cho phép Ngăn dẫn hướng tự vẽ chồng lên thanh trạng thái trasparent.

Tôi không thể làm điều đó bằng cách sử dụng API

getWindow().setStatusBarColor(ContextCompat.getColor(activity ,R.color.my_statusbar_color)

Nếu bạn kiểm tra ở đây trong phần tràn ngăn xếp, mọi người trước khi dòng mã đó đặt độ trong suốt của thanh trạng thái thành vững chắc với

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)

Tôi có thể quản lý màu sắc và độ trong suốt của thanh trạng thái như sau:

  • Android 4: Bạn không thể làm gì nhiều, vì bạn không thể quản lý màu thanh trạng thái từ API ... điều duy nhất bạn có thể làm là đặt thanh trạng thái thành trong mờ và di chuyển phần tử có màu của giao diện người dùng của bạn dưới trạng thái quán ba. Để làm điều này, bạn cần phải chơi với

    android:fitsSystemWindows="false"
    

    trong bố cục chính của bạn. Điều này cho phép bạn vẽ bố cục của bạn dưới thanh trạng thái. Sau đó, bạn cần chơi với một số phần đệm ở trên cùng của bố cục chính của bạn.

  • Android 5 trở lên: bạn phải xác định phong cách với

    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    

    điều này cho phép ngăn điều hướng chồng lên thanh trạng thái.

    Sau đó, để thay đổi màu sắc giữ thanh trạng thái trong suốt, bạn phải đặt màu thanh trạng thái với

    drawerLayout.setStatusBarBackgroundColor(ContextCompat.getColor(activity, R.color.my_statusbar_color))
    

    nơi ngăn kéoLayout được định nghĩa như thế này

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
    
|
  • 1
    Nó làm việc cho tôi mà không cần <item name="android:windowDrawsSystemBarBackgrounds">true</item>. Dù sao, sau nhiều ngày tìm kiếm, tôi đã tìm thấy thứ gì đó thực sự hoạt động (chỉ mới được thử nghiệm trên Lolllipop vào lúc này). Cảm ơn –  20:45:47 09/07/2018
  • 1
    tôi đã gặp vấn đề tương tự và câu trả lời của bạn đã giúp tôi giải quyết vấn đề này. –  12:03:51 17/12/2018
10

Nếu bạn muốn thay đổi màu thanh trạng thái theo lập trình (và với điều kiện thiết bị chạy Android 5.0). Đây là một cách đơn giản để thay đổi statusBarColor từ bất kỳ Activity nào và các phương pháp rất dễ dàng khi các đoạn khác nhau có màu thanh trạng thái khác nhau.

 /**
 * @param colorId id of color
 * @param isStatusBarFontDark Light or Dark color
 */
fun updateStatusBarColor(@ColorRes colorId: Int, isStatusBarFontDark: Boolean = true) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        val window = window
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        window.statusBarColor = ContextCompat.getColor(this, colorId)
        setSystemBarTheme(isStatusBarFontDark)
    }
}

/** Changes the System Bar Theme.  */
@RequiresApi(api = Build.VERSION_CODES.M)
private fun setSystemBarTheme(isStatusBarFontDark: Boolean) {
    // Fetch the current flags.
    val lFlags = window.decorView.systemUiVisibility
    // Update the SystemUiVisibility depending on whether we want a Light or Dark theme.
    window.decorView.systemUiVisibility = if (isStatusBarFontDark) lFlags and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() else lFlags or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
}
|
7

Chỉnh sửa colorPrimary trong Colors.xml trong Giá trị thành màu bạn muốn Thanh trạng thái. Ví dụ:

   <resources>
<color name="colorPrimary">#800000</color> // changes the status bar color to Burgundy
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="red">#FF0000</color>
<color name="white">#FFFFFF</color>
<color name="cream">#fffdd0</color>
<color name="burgundy">#800000</color>

|
6

Giải pháp rất đơn giản, hãy đặt các dòng sau vào style.xml của bạn

Đối với chế độ tối:

<item name="android:windowLightStatusBar">false</item>
<item name="android:statusBarColor">@color/black</item>
|
6

Nếu bạn muốn làm việc trên Android 4.4 trở lên, hãy thử điều này. Tôi tham khảo câu trả lời của Harpreet và liên kết này. Android và thanh trạng thái trong suốt

Đầu tiên, gọi phương thức setStatusBarColored trong phương thức onCreate của Activity (tôi đặt nó trong một lớp sử dụng). Tôi sử dụng một hình ảnh ở đây, bạn có thể thay đổi nó để sử dụng một màu sắc.

public static void setStatusBarColored(Activity context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
    {
        Window w = context.getWindow();
        w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        int statusBarHeight = getStatusBarHeight(context);

        View view = new View(context);
        view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        view.getLayoutParams().height = statusBarHeight;
        ((ViewGroup) w.getDecorView()).addView(view);
        view.setBackground(context.getResources().getDrawable(R.drawable.navibg));
    }
}

public static int getStatusBarHeight(Activity context) {
    int result = 0;
    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = context.getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

Trước: Làm cách nào để thay đổi màu thanh trạng thái trong Android?

Sau: Làm cách nào để thay đổi màu thanh trạng thái trong Android?

Màu của thanh trạng thái đã được thay đổi, nhưng thanh điều hướng bị cắt, vì vậy chúng ta cần đặt lề hoặc độ lệch của thanh điều hướng trong phương thức onCreate.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, (int)(this.getResources().getDimension(R.dimen.navibar_height)));
        layoutParams.setMargins(0, Utils.getStatusBarHeight(this), 0, 0);

        this.findViewById(R.id.linear_navi).setLayoutParams(layoutParams);
    }

Khi đó thanh trạng thái sẽ như thế này.

Làm cách nào để thay đổi màu thanh trạng thái trong Android?

|
4

Đây là những gì đã làm việc cho tôi ở KitKat và với kết quả tốt.

public static void setTaskBarColored(Activity context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
        {
            Window w = context.getWindow();
            w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //status bar height
            int statusBarHeight = Utilities.getStatusBarHeight(context);

            View view = new View(context);
            view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            view.getLayoutParams().height = statusBarHeight;
            ((ViewGroup) w.getDecorView()).addView(view);
            view.setBackgroundColor(context.getResources().getColor(R.color.colorPrimaryTaskBar));
        }
    }
|
3

thay đổi colorPrimaryDark thành màu mong muốn của bạn vào tệp res / values ​​/ styles.xml

    <resources>
        <color name="colorPrimary">#800000</color>
        <color name="colorPrimaryDark">#303F9F</color> //This Line
        <color name="colorAccent">#FF4081</color>
        <color name="red">#FF0000</color>
        <color name="white">#FFFFFF</color>
       <color name="cream">#fffdd0</color>
       <color name="burgundy">#800000</color>
    </resources>
|
2

Chỉ cần thêm những dòng này vào tệp styles.xml của bạn

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- This is used for statusbar color. -->
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <!-- This is used for statusbar content color. If statusbarColor is light, use "true" otherwise use "false"-->
    <item name="android:windowLightStatusBar">false</item>
</style>
|
2

Một giải pháp khác:

final View decorView = w.getDecorView();
View view = new View(BaseControllerActivity.this);
final int statusBarHeight = UiUtil.getStatusBarHeight(ContextHolder.get());
view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight));
view.setBackgroundColor(colorValue);
((ViewGroup)decorView).addView(view);
|
0

Nếu bạn muốn đặt một tệp có thể vẽ tùy chỉnh, hãy sử dụng đoạn mã này

fun setCustomStatusBar(){
    if (Build.VERSION.SDK_INT >= 21) {
        val decor = window.decorView
        decor.viewTreeObserver.addOnPreDrawListener(object :
            ViewTreeObserver.OnPreDrawListener {
            override fun onPreDraw(): Boolean {
                decor.viewTreeObserver.removeOnPreDrawListener(this)
                val statusBar = decor.findViewById<View> 
                  (android.R.id.statusBarBackground)
                statusBar.setBackgroundResource(R.drawable.bg_statusbar)
                return true
            }
        })
    }
}
|
0

tôi đã sử dụng mã này để thay đổi thanh trạng thái thành trong suốt

    activity?.window?.setFlags(
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
    )

để thay đổi nó thành màu theo kiểu đã sử dụng mã này mà tôi đã sử dụng trong phân đoạn trong onDetach ()

activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.