카테고리 보관물: 안드로이드

안드로이드

Android에서 상태 표시 줄 색상을 변경하는 방법은 무엇입니까? 표시 줄과 동일한 상태

우선 안드로이드 상태 표시 줄의 배경색을 변경하는 방법 과 같이 중복되지 않습니다.

탐색 표시 줄과 동일한 상태 표시 줄 색상을 변경하는 방법

상태 표시 줄 색이 탐색 표시 줄 색과 동일하게하고 싶습니다.

여기에 이미지 설명을 입력하십시오



답변

Android 5.0 Lollipop colorPrimaryDark은 테마 값에 따라 상태 표시 줄을 자동으로 색칠하는 Material Design 테마를 도입했습니다 .

버전 21부터 라이브러리 support-v7-appcompat 덕분에 장치 사전 롤리팝에서 지원됩니다. Chris Banes의 지원 appcompat v21에 대한 블로그 게시물

공식 Android 개발자 웹 사이트에서 머티리얼 테마에 대해 자세히 알아보십시오


답변

최신 정보:

사탕 과자:

public abstract void setStatusBarColor (int color)

API 레벨 21에 추가됨

Android Lollipop은 앱에서 상태 표시 줄의 색상을 변경하여 몰입 형 사용자 경험을 제공하고 Google과 조화를 이루는 기능을 제공했습니다 Material Design Guidelines.

window.setStatusBarColor소개 된 새로운 방법을 사용하여 상태 표시 줄의 색상을 변경하는 방법은 다음과 같습니다 API level 21.

상태 표시 줄의 색상을 변경하려면 창에 두 개의 추가 플래그를 설정해야합니다. FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS플래그 를 추가하고 플래그를 지워야합니다 FLAG_TRANSLUCENT_STATUS.

근무 코드 :

import android.view.Window;

Window window = activity.getWindow();

// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

// finally change the color
window.setStatusBarColor(ContextCompat.getColor(activity,R.color.my_statusbar_color));

외부 개발자 참조 : setStatusBarColor (int)

예 : 모든 곳에서 재료 설계

Chris Banes 블로그-appcompat v21 : 롤리팝 이전 장치의 재료 설계!

transitionName보기 배경이 될 것입니다 android:status:background.


답변

Lollipop에서이를 활성화하려면 values-v21 / styles.xml입니다.

<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>
        <item name="android:statusBarColor">@color/color_primary</item>
    </style>
</resources>

답변

이 기능은 라이브러리없이 수행 할 수있는 매우 쉬운 방법입니다. OS 버전이 kitkat에서 지원되지 않는 경우 아무 일도 일어나지 않습니다. 나는이 단계를 수행

  1. 내 XML 에서이보기 위에 추가했습니다.
<View
        android:id="@+id/statusBarBackground"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

그런 다음이 방법을 만들었습니다.

 public void setStatusBarColor(View statusBar,int color){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
           Window w = getWindow();
           w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
           //status bar height
           int actionBarHeight = getActionBarHeight();
           int statusBarHeight = getStatusBarHeight();
           //action bar height
           statusBar.getLayoutParams().height = actionBarHeight + statusBarHeight;
           statusBar.setBackgroundColor(color);
     }
}

또한 액션 바 및 상태 표시 줄 높이를 얻으려면 두 가지 방법이 필요합니다.

public int getActionBarHeight() {
    int actionBarHeight = 0;
    TypedValue tv = new TypedValue();
    if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
    {
       actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
    }
    return actionBarHeight;
}

public int getStatusBarHeight() {
    int result = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

그런 다음 상태 표시 줄 색상을 설정하기 위해이 줄만 필요합니다.

setStatusBarColor(findViewById(R.id.statusBarBackground),getResources().getColor(android.R.color.white));

답변

@Niels는 values-v21 / styles.xml에 배치해야한다고 말했습니다.

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

그러나 tools:targetApi="lollipop"다음과 같이 단일 styles.xml을 원하면 추가 하십시오.

<item name="android:statusBarColor" tools:targetApi="lollipop">@color/black</item>

답변

음, Izhar 솔루션은 괜찮 았지만 개인적으로 다음과 같은 코드를 피하려고합니다.

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//Do what you need for this SDK
};

또한 코드를 복제하는 것을 좋아하지 않습니다. 귀하의 답변에 모든 활동에 이러한 코드 줄을 추가해야합니다.

setStatusBarColor(findViewById(R.id.statusBarBackground),getResources().getColor(android.R.color.white));

그래서 Izhar 솔루션을 가져 와서 XML을 사용하여 동일한 결과를 얻었습니다. StatusBar status_bar.xml에 대한 레이아웃 만들기

<View xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="@dimen/statusBarHeight"
     android:background="@color/primaryColorDark"
     android:elevation="@dimen/statusBarElevation">

높이 및 표고 속성을 확인하십시오.이 값은 values-v19, values-v21 아래로 설정됩니다.

include, main_activity.xml을 사용하여이 레이아웃을 활동 레이아웃에 추가하십시오.

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

<include layout="@layout/status_bar"/>
<include android:id="@+id/app_bar" layout="@layout/app_bar"/>
//The rest of your layout
</RelativeLayout>

툴바의 경우 상단 여백 속성을 추가하십시오.

<android.support.v7.widget.Toolbar 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="?android:attr/actionBarSize"
android:background="@color/primaryColor"
app:theme="@style/MyCustomToolBarTheme"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
android:elevation="@dimen/toolbarElevation"
android:layout_marginTop="@dimen/appBarTopMargin"
android:textDirection="ltr"
android:layoutDirection="ltr">

appTheme style-v19.xml 및 styles-v21.xml에서 windowTranslucent attr을 추가하십시오.

styles-v19.xml, v21 :

<resources>
<item name="android:windowTranslucentStatus">true</item>
</resources>

마지막으로 dimens-v19, dimens-v21에 툴바 topMargin의 값과 KitKat보다 작은 경우 statusBarHeight : dimens.xml의 높이를 추가하십시오.

<resources>
<dimen name="toolbarElevation">4dp</dimen>
<dimen name="appBarTopMargin">0dp</dimen>
<dimen name="statusBarHeight">0dp</dimen>
</resources>

KitKat 이상에서 상태 표시 줄 높이는 항상 24dp dimens-v19.xml입니다.

<resources>
<dimen name="statusBarHeight">24dp</dimen>
<dimen name="appBarTopMargin">24dp</dimen>
</resources>

Lolipop의 경우 dimens-v21.xml, 필요한 경우 높이를 추가하십시오.

<resources>
<dimen name="statusBarElevation">4dp</dimen>
</resources>

Jellybean KitKat 및 Lollipop의 결과입니다.


답변

이 간단한 코드를 사용할 수 있습니다 :

코 틀린의 원 라이너 :

window.statusBarColor = ContextCompat.getColor(this, R.color.colorName)

Java 및 수동 버전 확인을 통한 독창적 인 답변 :

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().setStatusBarColor(getResources().getColor(R.color.colorAccentDark_light, this.getTheme()));
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().setStatusBarColor(getResources().getColor(R.color.colorAccentDark_light));
}