AndroidSDK Support 자체 야간,주간 모드 전환 상세 설명

이 블 로 그 를 쓰 는 목적 은 바로 AndroidSDK 가 자체 적 으로 가지 고 있 는 support lib 를 이용 하여 앱 의 일간/야간 모드 전환 을 실현 하 는 것 을 가 르 치 는 것 이다.최근 에 많은 게시 물이 이 야간 모드 전환 에 관 한 오픈 소스 프로젝트 를 하 는 것 을 보 았 는데 사실은 AndroidSDK Support 에서 이미 좋 은 지원 을 받 았 다.
본문 demo 다운로드 주 소 는 글 의 끝 에 있 습 니 다.문 서 를 보고 아직 실현 되 지 않 으 면 다운로드 하고 놀 수 있 습 니 다.
--------------------------------------------------------------------------------
효과 시범
왼쪽 은 안 드 로 이 드 4.1 효과,오른쪽 은 안 드 로 이 드 6.0 효과.

실현 절차
저 는 제 demo 를 예 로 들 어 Style 을 수정 해 야 합 니 다.Day/Night 에 대해 서로 다른 Style 이나 Color 를 설정 하고 전환 모드 는 자바 코드 에서 이 루어 져 야 합 니 다.
우선 새 항목 이 필요 합 니 다.초기 Activity 를 선택 할 때 BaseActivity 를 선택 하 십시오.
1.appcompat 라 이브 러 리 의존
app module 의 gradle 에서 app copat 라 이브 러 리 에 의존 하고 버 전 은 최소 23.2.0 입 니 다.

dependencies {
 compile 'com.android.support:appcompat-v7:23.4.0'
}

오늘 블 로그 가 주간 야간 모드 로 전환 하 는 원 리 는 style 로 전환 하 는 것 입 니 다.우리 페이지 에 여러 가지 style 이 인용 되 어 있 기 때문에 우 리 는 서로 다른 style 을 정의 하기 위해 서 우리 의 레이아웃 페이지 를 대충 조회 하면 됩 니 다.

<?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"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:fitsSystemWindows="true"
 tools:context="com.yanzhenjie.daynight.MainActivity">

 <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>

 <include layout="@layout/content_main" />

 <android.support.design.widget.FloatingActionButton
 android:id="@+id/fab"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_gravity="bottom|end"
 android:layout_margin="@dimen/fab_margin"
 android:src="@android:drawable/ic_dialog_email" />

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

스타일 수정
res/values/styles.xml 를 열 고 원래 의 것 을:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 <item name="colorPrimary">@color/colorPrimary</item>
 <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
 <item name="colorAccent">@color/colorAccent</item>
</style>

다음으로 변경:

<style name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar">
 <item name="colorPrimary">@color/colorPrimary</item>
 <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
 <item name="colorAccent">@color/colorAccent</item>
</style>
즉,Light 를 Day Night,Day Night 이라는 주제 나 하위 주제 로 바 꿔 야 화이트 야간 모드 전환 을 지원 합 니 다.
3.서로 다른 패턴 을 위해 서로 다른 colors 를 씁 니 다.
우 리 는 위의 AppTheme 이라는 주제 아래 세 개의 색 을 설정 한 것 을 알 게 되 었 습 니 다.여기 서 하나의 효 과 를 간단하게 실현 합 니 다.우 리 는 이 세 가지 색 을 수정 하면 됩 니 다.res 아래 에 values-night 폴 더 를 새로 만 들 수 있 습 니 다.

이 폴 더 의 역할 을 먼저 설명해 야 합 니 다.기본 모드 는 보통 일간 모드 이기 때문에 시스템 은 values 의 값 을 읽 습 니 다.야간 모드 로 전환 할 때 values-night 의 값 을 읽 습 니 다.style 이 든 color 이 든.그래서 우 리 는 간단하게 색상 을 바 꿉 니 다.그러면 새로운 colors.xml 을 만 듭 니 다.values 의 colors.xml 를 먼저 봅 시다.

그리고 values 의 colors.xml 파일 을 values-night 에 복사 하고 색상 을 수정 합 니 다.

나 는 간단하게 짙 은 남색 을 옅 은 남색 으로 바 꾸 고,장미색 을 황금색 으로 바 꾸 었 다.
OK,styel 과 color 는 여기까지 기술 입 니 다.다음은 자바 코드 전환 모드 입 니 다.
자바 코드 낮 야간 모드 제어
우선 이 기능 은 슈퍼 port-apcompat 에서 왔 기 때문에 우리 의 Activity 는 계 승 된 AppCompat Activity 입 니 다.
아래 의 세 가지 모드 는 모두 초기 화,또는 명시 적 호출 에 사용 할 수 있 습 니 다.
첫 번 째,자동 모드 입 니 다.만약 에 저희 app 에 위치 추적 권한,네트워크 권한 등 이 있 으 면 시스템 은 지금 이 밤 인지 낮 인지 자동 으로 확인 할 수 있 습 니 다.사용자 가 앱 을 열 때 자동 으로 응답 모드 로 전환 합 니 다.이 모드 는 저희 가 앱 초기 화 나 Application 에서 정적 코드 로 설정 할 수 있 습 니 다.

{
 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
}
두 번 째,일간 모드,호출 후 Activity 의 recreate()방법 을 사용 해 야 합 니 다.
getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);
recreate();
세 번 째,야간 모드,호출 후 Activity 의 recreate()방법 을 사용 해 야 합 니 다.
getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);
recreate();
됐어,아주 거 칠 어,이렇게 간단 해,끝났어.
총결산
 1.복잡 하 게 실현 하려 면 values-night 에서 만 다른 색 을 설정 하 는 것 이 아니 라 다른 style 을 만들어 다른 view 에 인용 할 수 있 습 니 다.
 2.주의해 야 할 두 가지 부분,하 나 는 app 또는 activity 가 인용 하 는 style 입 니 다.Theme.AppCompat.Day Night 또는 그의 하위 style 이 필요 합 니 다.다른 하 나 는 getDelegate().setLocalNightMode()를 호출 하 는 것 입 니 다.당신 의 Activity 는 반드시 AppCompat Activity 를 계승 해 야 합 니 다.
문장 데모 원본 다운로드:http://xiazai.jb51.net/201609/yuanma/AndroidDayNightSample(jb51.net).rar
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기