Lollipop에서 앱과 일치하도록 상태 표시 줄 색상을 변경하는 방법은 무엇입니까? [기계적 인조 인간]


96

새로운 롤리팝 업데이트에서 기본 Google 앱을 사용하면 실행중인 앱의 작업 표시 줄과 일치하도록 상태 표시 줄의 색상이 변경되는 것을 확인했습니다. 트위터 앱에서도 볼 수 있기 때문에 할 수있는 사람은 Google만이 아니라고 생각합니다.

가능하다면 누구든지 이것을하는 방법을 알고 있습니까?

답변:


220

상태 표시 줄 색상을 변경하려면 setStatusBarColor (int color)를 사용하십시오 . javadoc에 따르면 창에 몇 가지 플래그를 설정해야합니다.

작업 코드 스 니펫 :

Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(ContextCompat.getColor(activity, R.color.example_color));


명심 재료 설계 지침에 따라 상태 표시 줄 색상과 작업 표시 줄의 색이 달라야합니다 :

  • ActionBar기본 500 색상을 사용해야합니다.
  • StatusBar기본 700 색상을 사용해야합니다.

아래 스크린 샷을보십시오.

여기에 이미지 설명 입력


4
효과가 에뮬레이터에 표시되지 않을 수 있습니다. 예를 들어이 샘플 프로젝트 는 Android 5.0 에뮬레이터가 아닌 Nexus 9의 상태 표시 줄에 색조를 표시합니다.
CommonsWare 2014

1
@mate : Android SDK 에뮬레이터를 언급했습니다. Genymotion에서 작동하고 있다는 것을 알게되어 좋습니다.
CommonsWare

3
@Azad 아니요, 아닙니다. 위의 코드 스 니펫을 사용하려면 장치가 API 21 이상에서 실행되는지 확인해야합니다.
klimat

1
저는 비교적 간단한 프로젝트를 진행 중이며 방금 사용 getWindow().setStatusBarColor(activity.getResources().getColor(R.color.example_color));했고 완벽하게 작동 했다고 말해야합니다 . 플래그가 엄격하게 필요한 컨텍스트에 대해 확실하지 않습니다.
호아킨 Iurchuk

3
사전 롤리팝 기기에서도 색상을 표시하고 싶습니다. 어떻게 할 수 있습니까?
WISHY

48

styles.xml에 이것을 추가하십시오. colorPrimary는 작업 표시 줄용이고 colorPrimaryDark는 상태 표시 줄용입니다.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:colorPrimary">@color/primary</item>
    <item name="android:colorPrimaryDark">@color/primary_dark</item>
</style>

개발자 Android의이 사진은 색상 팔레트에 대해 자세히 설명합니다. 이 링크에서 더 많은 것을 읽을 수 있습니다 .

여기에 이미지 설명 입력


안드로이드 스튜디오는 각 프로젝트에 대해 다음과 같은 항목을 작성 <color name="colorPrimary">#somecolor</color>하고 <color name="colorPrimaryDark">#somecolor</color>. 원하는 효과를 얻기 위해 변경할 수 있습니다.
Neurotransmitter

41

상태 표시 줄 색상을 설정하는 또 다른 방법은 style.xml을 사용하는 것 입니다.

이를 위해 res / values-v21 폴더 아래에 다음 내용 으로 style.xml 파일을 만듭니다 .

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="android:Theme.Material">
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="android:colorPrimaryDark">@color/blue_dark</item>
    </style>
</resources>

편집 : 주석에서 지적했듯이 AppCompat을 사용할 때 코드가 다릅니다. res / values ​​/ style.xml 파일에서 대신 다음을 사용하십시오.

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">   
    <!-- Set AppCompats color theming attrs -->
    <item name="colorPrimary">@color/my_awesome_red</item>
    <item name="colorPrimaryDark">@color/my_awesome_darker_red</item>
    <!-- Other attributes -->
</style>

1
그거 했어. 그러나 작동하지 않았습니다. 하지만 Material 대신 AppCompat을 사용합니다.
Martin

3
@Martin appcompat의 경우 android 접두사없이 colorPrimaryDark를 사용합니다.
Michiel

appcompat에서도 작동하지 않음 (레벨 18에서 테스트 됨)
Mohammad Zekrallah

상태 표시 줄 색상은 OS API 레벨 21 이상이 설치된 기기에서만 작동합니다. 또한 매니페스트에서 개별 활동에서이 스타일을 재정의하지 않는지 확인하세요.
Levon 2016 년

응용 프로그램의 색상과 동일한 검색 창 색상을 변경하는 방법에 inappbrowser에 대한
R.Anandan

23

상태 표시 줄 색상을 설정하려면 다음 내용으로 res / values-v21 폴더 아래에 style.xml 파일을 만듭니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppBaseTheme" parent="AppTheme">
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@color/blue</item>
    </style>

</resources>

그것은 기호 windowDrawsSystemBarBackgrounds 해결할 수 없다고
jmhostalet

4

두 가지 스타일을 사용하는 경우 v21 스타일로이 줄을 추가하십시오.

  <item name="android:statusBarColor">#43434f</item>

플래그 설정 없이는 작동하지 않습니다android:windowDrawsSystemBarBackgrounds
Slav

4

또한 status-bar다른 활동 ( 조각 )에 대해 다른 색상을 원하는 경우 다음 단계로 수행 할 수 있습니다 (API 21 이상에서 작업).

먼저 values21/style.xml다음 코드를 만들고 입력하십시오.

 <style name="AIO" parent="AIOBase">
            <item name="android:windowDrawsSystemBarBackgrounds">true</item>
            <item name="android:windowContentTransitions">true</item>
    </style>

그런 values/style.xml다음 다음과 같이 White | Dark 테마를 정의하십시오 .

 <style name="AIOBase" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_primary_dark</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:textColorPrimary">@android:color/black</item>
        <item name="android:statusBarColor" tools:targetApi="lollipop">@color/color_primary_dark
        </item>
        <item name="android:textColor">@color/gray_darkest</item>
        <item name="android:windowBackground">@color/default_bg</item>
        <item name="android:colorBackground">@color/default_bg</item>
    </style>


    <style name="AIO" parent="AIOBase" />

    <style name="AIO.Dark" parent="AIOBase">
        <item name="android:statusBarColor" tools:targetApi="lollipop">#171717
        </item>
    </style>

    <style name="AIO.White" parent="AIOBase">
        <item name="android:statusBarColor" tools:targetApi="lollipop">#bdbdbd
        </item>
    </style>

또한 manifest.xml.


2

Android 이전 Lollipop 장치에서는 SystemBarTintManager 에서 수행 할 수 있습니다. Android 스튜디오를 사용하는 경우 Gradle 파일에 Systembartint lib를 추가하기 만하면됩니다.

dependencies {
    compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
    ...
}

그런 다음 활동에서

// create manager instance after the content view is set
SystemBarTintManager mTintManager = new SystemBarTintManager(this);
// enable status bar tint
mTintManager.setStatusBarTintEnabled(true);
mTintManager.setTintColor(getResources().getColor(R.color.blue));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.