Android 야간 모드 구현 빠 르 고 간단 한 방법 인 스 턴 스 상세 설명

9847 단어 android야간 모드
ChangeMode
프로젝트 주소:ChangeMode
Implementation of night mode for Android.
가장 간단 한 방식 으로 야간 모드 를 실현 하고 ListView,RecyclerView 를 지원 합 니 다.
Preview
ChangeMode
Usage xml

android:background="?attr/zzbackground"
app:backgroundAttr="zzbackground"//           ,            R.attr.zzbackground   zzbackground   
android:textColor="?attr/zztextColor"
app:textColorAttr="zztextColor"//             
java

@Override
protected void onCreate(Bundle savedInstanceState) {
//1.                 
ChangeModeController.getInstance().init(this,R.attr.class).setTheme(this, R.style.DayTheme, R.style.NightTheme);
//           
//ChangeModeController.setTheme(this, R.style.DayTheme, R.style.NightTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//     view      
// ChangeModeController.getInstance().addBackgroundColor(toolbar, R.attr.colorPrimary);
//ChangeModeController.getInstance().addBackgroundDrawable(view,R.attr.colorAccent);
// ChangeModeController.getInstance().addTextColor(view,R.attr.colorAccent);
//2.     
//ChangeModeController.changeDay(this, R.style.DayTheme);
//ChangeModeController.changeNight(this, R.style.NightTheme);
}
@Override
protected void onDestroy() {
super.onDestroy();
//3.   onDestroy   
ChangeModeController.onDestory();
}
자세 한 조작 설명
첫 번 째 단계:사용자 정의 속성

<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="zzbackground" format="color|reference"/>
<attr name="zzbackgroundDrawable" format="reference"/>
<attr name="zztextColor" format="color"/>
<attr name="zzItemBackground" format="color"/>
</resources>
두 번 째 단계:야간 style 파일 설정

<resources>
<!-- 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>
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="windowNoTitle">true</item>
</style>
<!--     -->
<style name="DayTheme" parent="AppTheme">
<item name="zzbackground">@color/dayBackground</item>
<item name="zzbackgroundDrawable">@drawable/ic_launcher</item>
<item name="zztextColor">@color/dayTextColor</item>
<item name="zzItemBackground">@color/dayItemBackground</item>
</style>
<!--     -->
<style name="NightTheme" parent="AppTheme">
<item name="zzbackground">@color/nightBackground</item>
<item name="zzbackgroundDrawable">@color/nightBackground</item>
<item name="zztextColor">@color/nightTextColor</item>
<item name="zzItemBackground">@color/nightItemBackground</item>

<item name="colorPrimary">@color/colorPrimaryNight</item>
<item name="colorPrimaryDark">@color/colorPrimaryDarkNight</item>
<item name="colorAccent">@color/colorAccentNight</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>
관련 속성 에 대응 하 는 모드 의 속성 값 을 설정 합 니 다:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="dayBackground">#F2F4F7</color>
<color name="dayTextColor">#000</color>
<color name="dayItemBackground">#fff</color>
<color name="nightItemBackground">#37474F</color>
<color name="nightBackground">#263238</color>
<color name="nightTextColor">#fff</color>
</resources>
세 번 째 단계:레이아웃 파일 에 대응 하 는 속성 을 설정 합 니 다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:background="?attr/zzbackground"
app:backgroundAttr="zzbackground"
tools:context="com.thinkfreely.changemode.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app: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:backgroundAttr="colorPrimary"
app:titleTextColor="?attr/zztextColor"
app:popupTheme="@style/AppTheme.PopupOverlay"
/>
</android.support.design.widget.AppBarLayout>
<Button
android:layout_width="match_parent"
android:layout_height="120dp"
android:gravity="center"
android:textColor="?attr/zztextColor"
app:textColorAttr="zztextColor"
android:background="?attr/zzItemBackground"
app:backgroundAttr="zzItemBackground"
android:padding="10dp"
android:layout_marginBottom="8dp"
android:textSize="22sp"
android:textAllCaps="false"
android:text="       by Mr.Zk" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
</LinearLayout>
textColorAttr,backgroundAttr,backgroundDrawableAttr 세 가지 속성 을 주의 하 십시오.현재 페이지 를 즉시 새로 고침 하려 면 해당 속성 을 입력 해 야 합 니 다.
속성 설명
textColorAttr 글꼴 색상 을 수정 할 때 설정 합 니 다.R.attr.zztextColor 에서 zztextColor 를 전달 하면 됩 니 다.예:app:textColorAttr="zztextColor"
backgroundAttr 배경 색/배경 그림 을 수정 할 때 설정 합 니 다.동상예:app:backgroundAttr="zzbackground"
backgroundDrawableAttr 배경 색/배경 그림 을 수정 할 때 설정 합 니 다.동상예:app:backgroundDrawableAttr="zzbackground"
STEP 4:페이지 호출 자바 코드

@Override
protected void onCreate(Bundle savedInstanceState) {
//1.                 
ChangeModeController.getInstance().init(this,R.attr.class).setTheme(this, R.style.DayTheme, R.style.NightTheme);
//           
//ChangeModeController.setTheme(this, R.style.DayTheme, R.style.NightTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//2.           
//ChangeModeController.changeDay(this, R.style.DayTheme);//      
//ChangeModeController.changeNight(this, R.style.NightTheme);//      
}
@Override
protected void onDestroy() {
super.onDestroy();
//3.   onDestroy   
ChangeModeController.onDestory();
}
코드 를 세 단계 호출 하면 야간 여행 을 시작 할 수 있 습 니 다.페이지 에 새로 만 든 보기 가 있 으 면 야간 모드 제어,코드 호출:

//     view      
// ChangeModeController.getInstance().addBackgroundColor(toolbar, R.attr.colorPrimary);
//ChangeModeController.getInstance().addBackgroundDrawable(view,R.attr.colorAccent);
// ChangeModeController.getInstance().addTextColor(view,R.attr.colorAccent);
야간 모드 를 바 꿀 때 다른 비 표준적 으로 정 의 된 속성 이 있 을 경우,ChangeModeController.changeDay 또는 ChangeModeController.changeNight 이후 다음 코드 를 호출 하여 관련 속성 에 값 을 부여 할 수 있 습 니 다.
TypedValue attrTypedValue = ChangeModeController.getAttrTypedValue(this, R.attr.zztextColor);
toolbar.setTitleTextColor(getResources().getColor(attrTypedValue.resourceId));
About me
An Android Developer in ZhengZhou.
License
======= Copyright 2016 zhangke
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 안 드 로 이 드 가 야간 모드 를 실현 하 는 빠 르 고 간단 한 방법 실례 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 여러분 에 게 답장 을 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기