Thay đổi màu văn bản của thanh trạng thái khi PrimaryDark có màu trắng


87

Tôi đang cố gắng tạo lại hoạt động của ứng dụng Lịch Google: nhập mô tả hình ảnh ở đây

nhưng tôi chưa tìm ra cách thay đổi màu văn bản trạng thái. Nếu tôi đặt colorPrimaryDark là màu trắng, tôi không thể nhìn thấy các biểu tượng cũng như văn bản của thanh trạng thái do màu của chúng cũng là màu trắng.

Có cách nào để thay đổi màu văn bản trên thanh trạng thái không?

Cảm ơn trước

Câu trả lời:


174

Tôi không chắc mức API mà bạn đang cố gắng nhắm mục tiêu, nhưng nếu bạn có thể sử dụng những thứ cụ thể của API 23, bạn có thể thêm những thứ sau vào AppTheme styles.xml:

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

khi android:windowLightStatusBarđược đặt thành true, màu văn bản của thanh trạng thái sẽ có thể được nhìn thấy khi màu của thanh trạng thái là màu trắng và ngược lại khi android:windowLightStatusBarđược đặt thành false, màu văn bản của thanh trạng thái sẽ được thiết kế để có thể nhìn thấy khi màu của thanh trạng thái tối.

Thí dụ:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <!-- Status bar stuff. -->
    <item name="android:statusBarColor">@color/colorPrimaryDark</item>
    <item name="android:windowLightStatusBar">true</item> 
</style>

38
nếu mức api của tôi là 21 nó không làm việc, bạn có thể cho tôi biết sự thay thế cho điều đó
saikrupa

8
Bất kỳ giải pháp nào được tìm thấy cho Api 21. Vui lòng giúp đỡ?
iMDroid

1
Lưu ý: android: windowLightStatusBar yêu cầu API cấp 23 (tối thiểu hiện tại là 21) hơn ... (⌘F1)
Hardik Darji 14/02/19

Đối với api 21, điều này là không thể. Trong các ứng dụng google, nó là một thanh màu đen chứ không phải màu trắng.
Joris

1
Xem bài đăng này cho Cấp độ API <23: stackoverflow.com/questions/49254877/…
Basti Vagabond

30

bạn có thể làm điều đó theo chương trình như câu trả lời này

chỉ cần thêm cái này

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

14

nó rất đơn giản:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//  set status text dark
getWindow().setStatusBarColor(ContextCompat.getColor(BookReaderActivity.this,R.color.white));// set status background white

và ngược lại:

getWindow().setStatusBarColor(ContextCompat.getColor(BookReaderActivity.this, R.color.black));
View decorView = getWindow().getDecorView(); //set status background black 
decorView.setSystemUiVisibility(decorView.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); //set status text  light

4

Như trước đó, SYSTEM_UI_FLAG_LIGHT_STATUS_BAR thực hiện công việc trong trường hợp của tôi, đừng quên đặt cao hơn API 22.

thêm cái này vào oncreate sau setContentView:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}

1
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//  set status text dark

getWindow().setStatusBarColor(ContextCompat.getColor(MainActivity.this,R.color.colorPrimaryDark));// set status background white

Nó phù hợp với tôi


Điều này yêu cầu cấp API 23+.
kanji

0

Hãy thử điều này một lần.

Trong onCreate()phương thức hoạt động của bạn , hãy dán mã sau.

try {
        if (android.os.Build.VERSION.SDK_INT >= 21) {
                Window window = getWindow();
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(ContextCompat.getColor(this, R.color.color_red));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

Lưu ý: color_red - là màu của thanh trạng thái.


2
Câu hỏi là về màu văn bản của thanh trạng thái, không phải nền của thanh trạng thái.
kanji

0

Trong onCreate()phương thức hoạt động của bạn , hãy dán mã sau vào sausetContentView(R.layout.activity_generic_main);

Đây là mẫu mã bên dưới.

public class GenericMain extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_generic_main);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

    }
}

0

Hãy thử điều này nếu không có trang giật gân

getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getActivity().getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getActivity().getWindow().setNavigationBarColor(ContextCompat.getColor(context, R.color.white));
getActivity().getWindow().setStatusBarColor(ContextCompat.getColor(context, R.color.white));
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.