primaryDark가 흰색 일 때 상태 표시 줄 텍스트 색상 변경


87

Google 캘린더 애플리케이션의 동작을 재현하려고합니다. 여기에 이미지 설명 입력

하지만 상태 텍스트 색상을 변경하는 방법을 찾지 못했습니다. colorPrimaryDark를 흰색으로 설정하면 색상이 흰색이기 때문에 상태 표시 줄의 텍스트도 볼 수 없습니다.

상태 표시 줄 텍스트 색상을 변경하는 방법이 있습니까?

미리 감사드립니다

답변:


174

목표로 삼 으려는 API 레벨을 잘 모르겠지만 API 23 특정 항목을 사용할 수 있다면 AppTheme styles.xml에 다음을 추가 할 수 있습니다.

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

android:windowLightStatusBartrue로 설정되어있는 상태 표시 줄 색상은 흰색이며, 때 반대가 반대 할 때, 상태 표시 줄의 텍스트 색상을 볼 수 할 수있을 것입니다 android:windowLightStatusBarfalse로 설정, 상태 표시 줄의 텍스트 색상이 상태 표시 줄의 색상이 때 볼 수 있도록 설계되어야한다 어두운.

예:

<!-- 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
내 API 레벨이 작동하지 않습니다 (21) 경우 당신은 내게 그에 대한 대안 말할 수있다
saikrupa

8
Api 21에 대한 해결책이 있습니다. 도와주세요?
iMDroid

1
참고 : android : windowLightStatusBar에는 API 레벨 23이 필요합니다 (현재 최소값 : 21) 자세히 ... (⌘F1)
Hardik Darji

API 21의 경우 이것은 불가능합니다. Google 애플리케이션에서는 흰색이 아닌 검은 색 막대입니다.
Joris

1
API 레벨 <23에 대해서는이 게시물을 참조하십시오. stackoverflow.com/questions/49254877/…
Basti Vagabond

30

답변 처럼 프로그래밍 방식으로 할 수 있습니다.

그냥 추가하세요

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

14

매우 간단합니다.

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

그 반대:

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

이전과 마찬가지로 SYSTEM_UI_FLAG_LIGHT_STATUS_BAR가 제 경우에 작업을 수행하므로 API 22 이상으로 설정하는 것을 잊지 마십시오.

setContentView 다음에 oncreate에 이것을 추가하십시오.

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

그것은 나를 위해 작동합니다


이를 위해서는 API 레벨 23 이상이 필요합니다.
한자

0

한 번 시도해보세요.

활동 onCreate()방법에 다음 코드를 붙여 넣습니다.

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

참고 : color_red-상태 표시 줄 색상입니다.


2
문제는 상태 표시 줄 배경이 아니라 상태 표시 줄의 텍스트 색상에 관한 것입니다.
한자

0

활동 onCreate()방법에서 다음 코드를setContentView(R.layout.activity_generic_main);

다음은 아래 샘플 코드입니다.

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

스플래시 페이지가 아니라면 이것을 시도하십시오

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));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.