상태 표시 줄이 흰색으로 바뀌고 뒤에 콘텐츠가 표시되지 않습니다.


96

Marshmallow에서 AppCompat을 사용해보고 있습니다. 투명 상태 표시 줄을 원하지만 흰색으로 바뀝니다. 몇 가지 솔루션을 시도했지만 저를 위해 작동하지 않았습니다 ( 투명 상태 표시 줄이 windowTranslucentNavigation = "false"와 함께 작동하지 않음 , Lollipop : 색상이 투명으로 설정된 상태 바 뒤에 그리기 ). 다음은 관련 코드입니다.

내 styles.xml

<style name="Bacon" parent="Theme.Bacon"/>

<style name="Theme.Bacon" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/theme_primary</item>
    <item name="colorPrimaryDark">@color/theme_primary_dark</item>
    <item name="colorAccent">@color/theme_accent</item>
    <item name="windowActionBar">false</item>
    <item name="windowActionBarOverlay">true</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowBackground">@color/background_material_light</item>  
</style>

<style name="Theme.Bacon.Detail" parent="Bacon"/>

v21

<style name="Bacon" parent="Theme.Bacon">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>

<style name="Theme.Bacon.Detail" parent="Bacon">
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

활동

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true" />

</FrameLayout>

파편

<android.support.design.widget.CoordinatorLayout 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="match_parent"
android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="192dp"
    android:fitsSystemWindows="true"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        app:contentScrim="?attr/colorPrimary"
        app:expandedTitleMarginBottom="32dp"
        app:expandedTitleMarginEnd="64dp"
        app:expandedTitleMarginStart="48dp"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:statusBarScrim="@color/black_trans80">

        <ImageView
            android:id="@+id/photo"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:contentDescription="@string/photo"
            android:fitsSystemWindows="true"
            android:scaleType="centerCrop"
            app:layout_collapseMode="parallax" />

        <android.support.v7.widget.Toolbar
            android:id="@+id/anim_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

여기에 이미지 설명 입력


이 문제를 해결할 수 있습니까? 나는 같은 문제가 있습니다. 흰색 상태 표시 줄이있는 내 활동 중 하나에서
kirtan403 2015

1
@ kirtan403 내 활동 레이아웃을 FrameLayout에서 RelativeLayout으로 변경하여 문제를 해결했습니다. 내 대답을 참조하십시오.
pt2121

Mine is Relative는 여전히 흰색 상태 표시 줄 만 표시됩니다. 나는 여기에 질문을 게시했습니다 : stackoverflow.com/q/33890066/1820644
kirtan403

하루 동안 고군분투 한 후 나는 나를 위해 일한 해결책을 찾았습니다. 답은 다음과 같습니다. stackoverflow.com/a/33892569/1820644
kirtan403

거짓과 그 작업에 windowTranslucentStatus 상태 : 나는 안드로이드를 변경
키란 베니 조셉

답변:


167

이 링크에서 답을 찾았습니다. 상대 레이아웃을 루트 요소로 사용하여 상태 표시 줄 색상이 변경되지 않음

그래서 우리는 제거해야합니다

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

styles.xml (v21)에서. 그리고 그것은 나를 위해 잘 작동합니다.


예, 이것이 해결책입니다. android : fitsSystemWindows는 탭 바를 스크롤 가능하게 만들 때 문제를 일으키기 때문입니다. 동일한 답변을 찾았지만 이전에 게시했습니다. 또한 이것이 기본 덮어 쓰기라고 생각합니다.
jobbert jul.

이는 허용 된 솔루션으로 표시되어야합니다. 이 문제는 내 앱 전체에서 발생했으며이 솔루션은 해당 한 줄을 주석 처리하여 모든 곳에서 해결되었습니다. 그런 두통을 구했습니다!
BMB

CoordinatorLayout을 사용하고 있으므로 루트로 CoordinatorLayout에 대한 다른 답변이 작동하지 않습니다 (제안 된대로 fitsSystemWindows = true 사용도 작동하지 않음). 이 대답은 저에게 효과적입니다.
Bruce

상태 표시 줄 색상을 투명하게하려면 어떻게해야합니까?
nullmn

1
@nullmn 그런 다음 활동 배경을 다른 것으로 변경해야합니다.
Phoenix Wang

96

(파티에 조금 늦었지만 누군가에게 도움이 될 수 있습니다)

나는 똑같은 문제가 있었다. 어쨌든 일부 활동은 정상 이었지만 새로 만든 활동은 colorPrimaryDark값 대신 흰색 상태 표시 줄을 표시했습니다 .

몇 가지 팁을 시도한 후 모든 작업 CoordinatorLayout이 레이아웃의 루트로 사용되는 정상적인 작업 활동을 발견 했으며 나머지는 .NET에서 제공하는 기능 (애니메이션 등)이 필요하지 않았기 때문에 일반 레이아웃으로 대체했습니다 CoordinatorLayout.

따라서 해결책은 CoordinatorLayout루트 레이아웃 을 만든 다음 그 안에 이전 레이아웃 루트를 추가하는 것입니다. 다음은 예입니다.

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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="match_parent"
  android:fitsSystemWindows="true">

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <!-- your activity content here-->


  </LinearLayout>
</android.support.design.widget.CoordinatorLayout>

android:fitsSystemWindows="true"이 솔루션 없이는 작동하지 않습니다.

Lollipop 및 Marshmallow에서 테스트 됨


3
솔루션은 저에게도 효과적이었습니다. 근데 .. 왜 그럴까요? 루트가 DrawerLayout 또는 CoordinatorLayout
user3316561

3
이것은 Android 8에 추가 android:fitsSystemWindows="true"할 때만 저에게 CoordinatorLayout
Franco

2
@Franco 나는 이것이 솔루션의 가장 관련성이 높은 부분이라고 생각합니다. 나는이 말을 내가했기 때문에 CoordinatorLayout내가 같은 문제이었다 날 위해 고정 된 특정 속성을 경험하는 경우android:fitsSystemWindows="true"
빌헬름

android:fitsSystemWindows="true"나를 위해 작동하지 않았다. 내 문제를 해결 AppTheme.NoActionBar한 것은 활동에 없는 테마를 CoordinatorLayout. 왜 고쳐 졌는지 모르겠습니다.
bmdelacruz

CoordinatorLayout또는 android:fitsSystemWindows="true"둘 다 나를 위해 일하지 않습니다.
Alif Hasnain

17
 <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@color/colorPrimaryDark</item>
    </style

이것을 바꾸기 만하면 statusBarColor는 투명하지 않고 예상되는 색상이어야합니다.


17

콘텐츠를 보려면 스타일에이 속성을 추가해야합니다.

<item name="android:windowLightStatusBar" tools:ignore="NewApi">true</item>

이것은 나를 위해 일했습니다. 이것은 받아 들여진 대답이어야합니다.
abdul rehman

11

이것을 style.xml에 추가하십시오.

    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>

그리고 이것은 당신의 onCreate ();

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

1
고맙지 만 작동하지 않습니다. 상태 표시 줄은 동일하게 보입니다.
pt2121

이 문제에 대한하시기 바랍니다 도움 ... 여기에 같은 문제 .... 솔루션 아무도 경작한다없는 지금 작동
사이드 Jassani에게

@SaeedJassani 나는 나를 위해 일한 해결책을 찾았습니다. 같은 문제가 있으면 내 질문과 답변을 살펴보십시오 : stackoverflow.com/a/33892569/1820644
kirtan403

9

위의 모든 것을 성공적으로 시도하지 못한 후 테마를 명시 적으로 설정하면 문제가 해결된다는 것을 알았습니다.

setTheme(R.style.AppTheme);

그것은 당신의 활동에서 super.OnCreate () 전에 가야합니다.


1
나는 이것이 Marshmallow의 잘못된 활동을 수정했음을 확인할 수 있습니다
dare0021

사랑해 사람, 매력처럼 일했지만 아직 이유를
모르겠지만

super.OnCreate ()이 키 전에
KARTHIK Rk를

9

이 항목을 v21 \ styles.xml에 넣으십시오.

진실

다음과 같아야합니다.

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:windowTranslucentStatus">true</item>
</style>


1
false마지막 두 항목의 값을 사용하여 저에게 효과적이었습니다 . 이상하지만 감사합니다.
JCarlosR

마지막 두 줄에서만 작동하지만 내용이 상태 표시 줄 뒤에 있고 padding / margin 또는 fitsSystemWindows는 도움이되지 않습니다. 누가를 실행하는 OP 5에서 테스트 됨
Anton Makov

9

나는 같은 문제에 직면했다. 내가 한 것은 "v21 / styles.xml"파일에서 true 값을 변경 한 것입니다.

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

에:

 <item name="android:windowDrawsSystemBarBackgrounds">false</item>

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

values ​​/ styles / styles.xml (v21)에서 해당 코드 줄을 볼 수 있습니다. 그것을 제거하면 문제가 해결됩니다.

이 답변에 연결


5

내 활동 레이아웃을 FrameLayout에서 RelativeLayout으로 변경하여 문제를 해결했습니다. 도와 주신 모든 분들께 감사드립니다!

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@android:color/transparent">

    <android.support.v4.view.ViewPager
      android:id="@+id/pager"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="@color/theme_primary_dark"
      android:fitsSystemWindows="true" />

</RelativeLayout>

hierarchy-viewer 또는 ViewInspector를 사용해보십시오 . 이러한 도구가 도움이 될 수 있습니다.


5

스타일 v21 @android : color / transparent에서 다음 태그를 제거하십시오.

이것은 나를 위해 작동합니다.


@android : color / transparent는 "태그"가 아닙니다. 스타일 속성의 값일 수 있지만 "태그"는 아닙니다. OP에이 값이 두 번 이상 정의 된 경우 어떻게됩니까? 어느 것을 제거해야합니까? 당신의 대답은 너무 일반적입니다.
protectedmember

그래, 나도 그래 .. 고마워, 쉔 드레! :) 및 귀하의 의견에 대해 @protectedmember-OS에는 성별이 없습니다.
zeroDivider

3

더 나은 접근

NoActionBar 테마가있는 style.xml 파일을 확인하십시오. 부모가 Theme.AppCompat.NoActionBar인지 확인하고 색 구성표를 추가하여 사용자 지정합니다. 마지막으로 필요에 따라 매니페스트에서 테마를 설정합니다.

아래는 내 styles.xml 파일 (ActionBar + NoActionBar)의 샘플입니다.

<!-- 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>
</style>

<!-- No ActionBar application theme. -->
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

2

나를 위해 다음을 수행하여 작동했습니다.

  1. 테마 설정 .NoActionBar
  2. 툴바 감싸기 android.support.design.widget.AppBarLayout
  3. android.support.design.widget.CoordinatorLayout부모 레이아웃으로 만듭니다 .

기본적으로 상태 표시 줄을 그리는 세 번째 단계입니다. colorPrimaryDark그렇지 않으면 NoActionBar테마 를 사용하는 경우 그려지지 않습니다 . 두 번째 단계는 툴바에 오버레이를 제공합니다 .


2

스타일 v23 용

 <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowLightStatusBar">true</item>
    <item name="android:statusBarColor">@android:color/white</item>
</style>

스타일 v21 용

<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:statusBarColor">@android:color/white</item>
</style>

2

[산출]

프로젝트 패널에서 res-> values-> styles 디렉토리를 확장하십시오.

styles.xml (v21) 열기

아래 방법 중 하나를 사용하십시오.

  1. true 에서 false 로 변경android:windowDrawsSystemBarBackgrounds속성 .
  2. 변화 @android : color / transparent@ color / colorPrimaryDark 하십시오.android:statusBarColor 속성입니다.
  3. android:statusBarColor재산 줄을 제거하십시오 .

2

v21 / styles.xml에

<resources>
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
</resources>

그런 다음 줄 아래를 제거 하거나 주석을 달거나 상태 표시 줄의 색상을 변경합니다.

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

잘 작동합니다. 도움이 되었기를 바랍니다. 감사.


2

나는 이것에 대한 해결책을 찾았습니다-

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowLightStatusBar">true</item>
</style>

이것을 스타일에 추가하면 API 21 이상에서 작동합니다.


1

늦었는지 모르겠지만 누군가에게 도움이되기를 바랍니다. * 레이아웃에 맞는 투명한 배경으로 가짜보기를 만들고 루트 레이아웃 요소로 코디네이터 레이아웃을 만듭니다.

<View
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:fitsSystemWindows="true" />


<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:scaleType="centerCrop"
    android:src="@drawable/something" />

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

   .... YOUR LAYOUT


1

이것은 나에게 일이 있습니다.

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

1
안녕하세요, StackOverflow에 오신 것을 환영합니다! 이 답변이 작동하는 이유를 자세히 설명하기 위해 답변을 편집 할 수 있습니까? 코드에 대한 간단한 설명이 먼 길을갑니다!
Gigazelle

0

내 생각 엔 이것이 당신의 android:windowBackground. 가 @color/background_material_light흰색에 대한 참조?


아니. 확실히 흰색은 아니지만 어쨌든 감사합니다! (당신은에 흰색 아이콘을 볼 수 있습니다.)
pt2121

나는 당신의 질문을 잘못 읽었습니다. 교체 시도 <item name="android:statusBarColor">@android:color/transparent</item>와 함께 <item name="android:statusBarColor">@null</item>.
hanspeide 2010 년

내가 정확하게 이해했는지 확인하기 위해 상태 표시 줄 뒤에 이미지를 표시 하시겠습니까?
hanspeide

0

이 도구 모음이 흰색으로 바뀌는 지 확인-화면에서 스크롤 한 후 AppBar가 그려지지 않습니다.

https://code.google.com/p/android/issues/detail?id=178037#c19

23.0.0 라이브러리를 사용하고 있습니다. 버그는 여전히 발생합니다.

이에 대한 해결 방법은 공간을 거의 차지하지 않고 보이지 않을 수있는보기를 추가하는 것입니다. 아래 구조를 참조하십시오.

<android.support.v4.widget.NestedScrollView
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

</android.support.v4.widget.NestedScrollView>

<android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.Toolbar
        app:layout_scrollFlags="scroll|enterAlways" />

    <android.support.design.widget.TabLayout
        app:layout_scrollFlags="scroll|enterAlways" />

    <View
        android:layout_width="match_parent"
        android:layout_height=".3dp"
        android:visibility="visible"/>

</android.support.design.widget.AppBarLayout>

Stackoverflow.com의이 질문은이 버그도 참조합니다. 전체 높이까지 입력시 CoordinatorLayout 툴바 표시 ​​안


같은 버그가 아닙니다. 제 경우에는 화면에서 스크롤 한 후가 아닌 활동이 표시된 직후 흰색입니다. 어쨌든 감사합니다
pt2121

0

RelativeLayout / CoordinatorLayout을 사용하는 경우 이것이 저에게 도움이 된 솔루션입니다.

당신은 사용해야합니다

  • CoordinatorLayout
  • AppBarLayout

RelativeLayout 대신 CoordinatorLayout을 사용하도록 Rember (성능이 더 좋고 AppBarLayout과 완벽하게 작동 함)

이것이 조각이 시작되는 방법입니다.

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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="match_parent"
android:background="@android:color/background_light"
android:fitsSystemWindows="true"
>

<android.support.design.widget.AppBarLayout
    android:id="@+id/main.appbar"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:fitsSystemWindows="true"
    >
    ...

좋은 코딩!


0
 <style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

스타일에 'windowTranslucentStatus'항목 추가


0

이것을 style.xml에 추가하십시오.

<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>

참고 : 상태 표시 줄 색상은 API 레벨 21 미만에서 지원되지 않습니다.


-1
    Window window = this.getWindow();
    window.setStatusBarColor(this.getResources().getColor(R.color.colorPrimaryDark));

아래의 Java 파일 에이 두 줄을 추가하십시오.


1
Stack Overflow에 오신 것을 환영합니다. 코드가 어떻게 작동하고 OP 질문을 해결하는 데 어떻게 도움이되는지 자세히 설명해 주시겠습니까? 답변 을 개선하기 위해 좋은 답변을 작성하는 방법을 참조하십시오
Tom M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.