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


427

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

nhập mô tả hình ảnh ở đây


2
chỉ có thể sau kitkat @MarkBuikema
codercat

4
Như Niels gợi ý, có một THEME ATTRIBUTE kể từ khi v21 được gọi android:statusBarColor. Bạn chỉ có thể thêm nó vào values-v21/styles.xml.
Levite

@MarkBuikema Làm thế nào mà thậm chí liên quan đến quyền truy cập root!
steve moretz

Câu trả lời:


623

Android 5.0 Lollipop đã giới thiệu chủ đề Thiết kế Vật liệu tự động tô màu thanh trạng thái dựa trên colorPrimaryDark giá trị của chủ đề.

Điều này được hỗ trợ trên kẹo mút thiết bị nhờ vào thư viện support-v7-appcompat bắt đầu từ phiên bản 21. Blogpost về hỗ trợ appcompat v21 từ Chris Banes

nhập mô tả hình ảnh ở đây

Đọc thêm về Chủ đề Vật liệu trên trang web chính thức của Nhà phát triển Android


29
trong một số lý do, thuộc tính colorPrimaryDark không hoạt động đối với tôi. đã thử trên trình giả lập v21
lệch lạc

3
Nó hoạt động bạn phải xem các thay đổi trên trình giả lập không phải trên bản xem trước bố cục [nó không hiển thị ở đó]
Mightian

6
colorPrimaryDark không hoạt động 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ơi có thể. Hiện tại, điều này được giới hạn trong việc tô màu thanh hành động và một số vật dụng."
Adam Johns

12
Điều gì về việc thay đổi màu chữ trong thanh trạng thái? Các tài liệu không nói gì về điều đó.
Scott

Tôi đã thử cách tương tự. 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 OS 5.0.1 và trong thanh trạng thái điện thoại này có màu đen. Và một khi tôi đi đến 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 đượ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
Hitesh Kamani

364

Cập nhật:

Lollipop:

public abstract void setStatusBarColor (int color)

Đã thêm API cấp 21

Android Lollipop mang đến 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 đắm chìm hơn và đồng điệu với Google Material Design Guidelines.

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

Thay đổi màu của thanh trạng thái cũng yêu cầu đặt 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 chiếu nhà phát triển chính thức: setStatusBarColor (int)

Ví dụ: vật liệu-thiết kế-ở mọi nơi

Blog của Chris Banes- appcompat v21: thiết kế vật liệu cho các thiết bị tiền Lollipop!

nhập mô tả hình ảnh ở đây

Các transitionNamenền cho xem sẽ là android:status:background.


2
Bất kỳ giải pháp cho khả năng tương thích ngược?
Adam Hurwitz

Như đã lưu ý trong câu trả lời của Niels: bạn cũng có thể định cấu hình màu của thanh trạng thái thông qua chủ đề / kiểu bằng cách đặt android:statusBarColortrong values-v21/styles.xmltệp của bạn theo androiddocs.com/training/m vật / theme.html như vậy<item name="android:statusBarColor">@color/primary_color</item>
JL West

4
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ể thấy biểu tượng thông báo như batery, làm thế nào tôi có thể giải quyết điều này?
MNFS

1
bạn không biết bạn đã giúp tôi bao nhiêu ..
Abhishek Dhyani

220

Đặt đây là giá trị-v21 / style.xml của bạn, để 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>

34
điều này đòi hỏi API tối thiểu 21
La Mã

49
Đây có lẽ là lý do tại sao anh ấy đề nghị đưa nó vào giá trị-v21 / style.xml ;-) Có vẻ là câu trả lời chính xác nhất cho đến nay !!
Levite

Nhưng đây vẫn là một cảnh báo !!?
Nihal Sharma

các chức năng cho compat là gì? thanh trạng thái
blackHawk

bạn có thể thêm targeApithuộc tính nếu bạn muốn duy trì một tệp kiểu duy nhất. Đọc câu trả lời của tôi để tham khảo stackoverflow.com/a/48565459/4291272
Faisal Shaikh

50

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

  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 thanh hành động và chiều cao của 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ử view ở đâu? nó nên ở trên cùng của bố trí chính?
Emil Reña Enriquez

Đúng. Trong xml của bạn. Ở đầu của nó.
itzhar

Thận trọng: Chỉ hoạt động cho Android> = 19 API. Trong trường hợp của tôi, tôi cần hỗ trợ bắt đầu từ 16
Anton Kizema

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

34

Như @Niels đã nói, bạn phải đặt trong value-v21 / Styles.xml:

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

Nhưng hãy thêm tools:targetApi="lollipop"nếu bạn muốn một kiểu tệp duy nhất, như:

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

3
Cảm ơn rất nhiều vì "targetApi". Tôi không thích có chủ đề của mình trải rộng trên nhiều tệp. :)
plexus

31

Chà, giải pháp của Izhar vẫn ổn, nhưng cá nhân tôi, tôi đang cố gắng tránh mã có vẻ như thế này:

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

Đồng thời, tôi cũng không muốn sao ché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 đã lấy 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 chiều cao và độ cao, chúng sẽ được đặt trong các giá trị, giá trị-v19, giá trị-v21 xuống.

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 bao gồm, 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ụ, thêm thuộc tính lề trên:

<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à style-v21.xml của bạn, hãy thêm cửa sổ attTranslucent:

kiểu-v19.xml, v21:

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

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

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

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

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

dimens-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:

nhập mô tả hình ảnh ở đây


Vì vậy, thay vì đặt mã kiểm tra, bạn đã đặt nó vào XML. Giải pháp của bạn sẽ hoạt động trên Kitkat, giống như những gì anh ta có.
nhà phát triển Android

26

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 gốc 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));
}

Bạn có thể đơn giản hóa hơn nữa bằng cách sử dụng ContextCompat. Trong Kotlin, nó chỉ là thế này:window.statusBarColor = ContextCompat.getColor(this, R.color.colorName)
sunadorer

Khi tôi viết nó, tôi đã không thử kotlin. Tại sao bạn không chỉnh sửa câu trả lời và tôi có thể chấp nhận nó :)
steve moretz

Ý tưởng tốt. Tôi đã đưa đề xuất của mình vào câu trả lời như một tài liệu tham khảo dễ dàng cho khách truy cập trong tương lai
sunadorer

màu thanh trạng thái đã thay đổi ở trên Build.VERSION_CODES.M. không hoạt động dưới Lollipop
Muhammed Haris

@MuhammedHaris nó hoạt động. Bạn sử dụng mã kotlin hoặc java?
steve moretz

23

Chỉ cần tạo một chủ đề mới trong res / value / 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, trong hoạt động tiếp theo, bạn có thể thay đổi màu trở lại màu gốc 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 / value / 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ĩ rằng đây là giải pháp đơn giản nhất nhưng sạch nhất. Không cần phải có mức API tối thiểu là 21 , chỉ cần ghi đè đơn giản. Xứng đáng hơn bình chọn.
tahsinRupam

Điều này không hoạt động khi chạy ở cấp độ Nougat và 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.
AndroidDev

18

Để thay đổi màu sắc cho lolipop ở trên, chỉ cần thêm màu này vào tệp style.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ột màu sáng cho thanh trạng thái, hãy thêm dòng này

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

1
Thanx, đó là câu trả lời hữu ích quá.
Andrew Grow

16

Bạn có thể thay đổi màu thanh trạng thái với 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 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));
    }
}

15

Tôi đã có yêu cầu này: Thay đổi lập trình màu thanh trạng thái giữ cho nó trong suốt , để cho phép Ngăn kéo Điều 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 ngăn xếp tràn tất cả mọi người trước khi dòng mã đó đặt độ trong suốt của thanh trạng thái thành rắn 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ư thế này:

  • 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 mờ và di chuyển phần tử màu của giao diện người dùng theo 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ố trí 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 với phần 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 kiểu 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 giữ cho thanh trạng thái trong suốt, bạn phải đặt màu của 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">

Nó làm việc cho tôi mà không có <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ỉ được thử nghiệm trên Lolllipop). Cảm ơn
DenisGL

tôi đã có cùng một vấn đề và câu trả lời của bạn đã giúp tôi giải quyết điều này.
A.Gun 17/12/18

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>


7

Để thay đổi màu của thanh trạng thái, hãy chuyển đến res/values-v21/styles.xmlvà mà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>

Này, bạn có thể giúp tôi không? Tôi không biết gì về Android và bây giờ tôi không thể bắt đầu học. Tôi có một ứng dụng phù thủy đơn giản chạy một tệp html. Tôi đang muốn thay đổi màu thanh trạng thái bởi vì trên và dưới trên # 000 là khủng khiếp đối với tôi. Nhưng tôi chỉ 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!
Thiago Soubra

6

Nếu bạn muốn thay đổi màu thanh trạng thái theo chương trình (và miễn là thiết bị có Android 5.0). Đây là một cách đơn giản để thay đổi statusBarColor từ bất kỳ Hoạt động nào và các phương thức 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
}

5

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: trước

Sau: sau

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 phần bù 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);
    }

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

thanh trạng thái


4

Đây là những gì làm việc cho tôi trong KitKat và có 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));
        }
    }

2

Thêm một giải pháp:

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);

Điều này sẽ hoạt động trên máy tính bảng có thanh trạng thái ở dưới cùng của màn hình?
chàng.gc

6
Có gì 'w' và 'UiUtil' ở đây?
Manav Patadia

2

thay đổi colorPrimaryDark thành màu mong muốn của bạn vào tệp res / value / 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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.