2012-01-28 69 views
14

Tôi muốn thay đổi màu nền của thanh trạng thái bằng cách viết một ứng dụng. Thiết bị Android của tôi có màu đen, tôi muốn đổi nó thành màu khác. Tôi thấy một số bài viết liên quan đến nó ở đây, nhưng họ đang nói về nền thông báo.Cách thay đổi màu nền của thanh trạng thái android

Nếu bất kỳ cơ thể nào biết về điều này, hãy giúp tôi.

Thanh trạng thái mặc định

enter image description here

Sau khi sử dụng có thể vẽ như làm nền cho thanh trạng thái

enter image description here

Trả lời

12

Xin lỗi, trừ khi bạn đang thực hiện một ROM tùy chỉnh này là không thể, trừ khi bạn chỉ muốn thay đổi thanh trạng thái cho ứng dụng của mình.

Điều này đòi hỏi rất nhiều công việc.

Trước tiên, bạn sẽ cần phải thêm Theme.NoTitleBar.Fullscreen để bạn manifest

<application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
     > 

Sau đó, một khi bạn đã làm được điều đó bạn cần phải tạo ra một bố cục tiêu chuẩn đại diện cho thanh trạng thái, điều này có nghĩa rằng bạn có để thêm thời gian, và cũng nhận được tất cả các thông báo từ các ứng dụng khác, tôi không đích thân biết làm thế nào để làm điều đó nhưng tôi chắc chắn có một cách.

Nếu bạn thực sự muốn làm điều này goodluck, bạn có một thời gian khó khăn phía trước của bạn.


Xin lỗi, trừ khi bạn có biết làm thế nào xây dựng ROMS tùy chỉnh Tôi không nghĩ rằng đây có thể

11

Điều này có thể trên Kitkat và sau.

Nếu bạn muốn sử dụng nó trong một ứng dụng (như bạn hỏi), bạn có thể sử dụng thư viện https://github.com/jgilfelt/SystemBarTint

Bạn chỉ cần phải viết:

// set a custom tint color for all system bars 
tintManager.setTintColor(Color.parseColor("#99000FF")); 
// set a custom navigation bar resource 
tintManager.setNavigationBarTintResource(R.drawable.my_tint); 
// set a custom status bar drawable 
tintManager.setStatusBarTintDrawable(MyDrawable); 
1

NẾU bạn muốn cập nhật màu thanh trạng thái trên Lollipop mà không nâng cấp ADT và SDK của bạn và tất cả những thứ liên quan, bạn có thể sử dụng phản xạ để tiếp cận các phương pháp API 21 (Lollipop) và cao hơn

trong hoạt động của bạn:

if (Build.VERSION.SDK_INT >= 21) { 
     Window window = getWindow(); 

     // original code, works on Lollipop SDKs 
     // window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
     // window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
     // window.setStatusBarColor(getResources().getColor(YOUR_COLOR)); 

     try { 
      // to work on old SDKs 
      int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = 0x80000000; 
      window.addFlags(FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
      window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 

      Class<?> cls = window.getClass(); 
      Method method = cls.getDeclaredMethod("setStatusBarColor", 
        new Class<?>[] { Integer.TYPE }); 

      method.invoke(window, Res.color(theme.statusColor)); 

     } catch (Exception e) { 
      // upgrade your SDK and ADT :D 
     } 

    } 

API tối thiểu hiện tại của tôi là 15, nếu bạn không thể tìm thấy

WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS 

trong SDK của bạn, bạn có thể nhận được giá trị của nó từ tài liệu như những gì tôi đã làm với

WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 

niềm hy vọng này đã giúp

+0

không làm việc cho 17: java.lang.NoSuchMethodException: setStatusBarColor [int] – djdance

7

Trong kiểu.xml làm điều này:

<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> 
     <!---Below is the code for status bar color------> 
     <item name="android:statusBarColor">@color/color_primary</item> 
    </style> 
</resources> 

Đặt mã này vào giá trị-v21/styles.xml để bật tính năng này trên Lollipop và sau đó.

Đối với làm việc đó theo chương trình làm việc này:

Window window = activity.getWindow(); 
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
window.setStatusBarColor(activity.getResources().getColor(R.color.example_color));` 
Các vấn đề liên quan