Androidナイトモード

5927 ワード

本文はオリジナルで、転載は出典を明記してください.文章のタイトルはナイトモードで、実は私がここで言いたいのはナイトモードではありませんて、Skinライブラリで、Skinライブラリがあって、分を分けて肌を変えるのは小さいCaseで、しかも分を分けて肌を変える機能を実現することができます.もちろんやはりその言葉で、そんなにキックアスで、何回も話をしようとしなかったので、やはり前の図で話しました.
画像の内容を簡単に紹介します:私はapkの中で普通のモードと夜間のモードの2セットの値を内蔵して、しかも外付けの皮膚の中でも普通のモードと夜間のモードを内蔵しました.
ezgif-3-d97abc2e86.gif
GithubでSkinライブラリのWikiをリリースするため、Android開発で肌を入れ替える機能を実現しました.スターの皆様を歓迎します.以下はWikiの内容です.
前に言った
Skinのクイック使用この記事では、このライブラリをすばやく使用して肌を交換する方法を紹介し、日常の肌交換のニーズを基本的に満たしています.この記事では、Skinライブラリの特徴を重点的に紹介します.
スキンケアの要件
新しい工事でスキンケア機能を使用する準備ができていても、既存の工事でスキンケア機能を使用する準備ができていても、唯一の要求はスキンケアが必要な資源を規範的に管理する必要があります.この規範の管理は資源の命名/分類を指します.命名とは、リソースの名前に一定の規範があり、勝手な命名ではなく、分類とは、どのリソースが肌を交換する必要があるかを知ることができることを意味します.どんな肌の入れ替え方法を使ってもSkinが適用されなくても、この規範は極めて重要であることを覚えておいてください.
Skin詳細
1.属性解析工場SkinAttrFactory属性解析工場では,ターゲット属性をどのようなルールで解析するか,すなわち,どのような属性が皮膚を交換する必要があると考えられるかについて述べた.Skinは、プレフィックス属性解析とタグ属性解析の2つの属性解析ファクトリの実装を提供します.属性解析ファクトリはSkin全体の主要なコンポーネントの1つです.現在、属性解析ファクトリでは、解析style(eg:style="@style/xxx")と参照属性(eg:android:background="@drawable/xxx"がサポートされており、値タイプ(eg:android:background="#ffff")の属性はサポートされていません.
プレフィックス属性解析プラントPrefixSkinAttrFactoryPrefixSkinAttrFactory属性を解析するルールは、特定の接頭辞を含む属性を解析することであり、eg:skin_login_bg.jpgである.PrefixSkinAttrFactoryは、レイアウトファイルの各ビューのプロパティを順次解析します.
  • 前提:工事中に肌を変える必要がある属性を固定的な接頭辞で命名することを要求し、ユーザーは任意の接頭辞を設定することができ、Skinはデフォルトでskinを接頭辞とする.
  • 利点:接頭辞をルールとして肌の属性を区別するため、この方式はすでに規模のある工事で肌の機能を実現するのに役立つことが多い.資源の名前だけを修正して引用資源の場所(例えばレイアウトファイル)を修正しなくても資源の整理を実現することができるので、資源の名前を修正するときに引用を修正することを覚えておくことができるからだ.
  • 欠点:解析時に各レイアウトファイルの要素が自動的に解析されるため、効率的には次のタグ属性解析工場に及ばない.

  • タグ属性解析工場NamespaceSkinAttrFactoryNamespaceSkinAttrFactoryプロパティを解析するルールは、レイアウトファイルにhttp://schemas.android.com/android/skinネーミングスペースを追加し、タグを追加したコントロールプロパティを解析することです.eg:
    
    
        
    
    
  • 前提:皮膚を交換するコントロールにマークを追加する必要があります.
  • の利点:タグを含むコントロールのみを解析するため、解析効率が向上し、新しいエンジニアリングにとってこの方法を採用するとより良い.
  • 欠点:マークが必要なため、すでに規模のある工事に与える労力の仕事が多くなります.

  • 独自の属性解析方式を拡張することができ、SkinAttrFactoryを継承するだけでよい.Skinデフォルト設定フラグ属性解析ファクトリでは、SkinManagerで構成を変更できます.
    相関Api
  • 接頭辞属性解析ファクトリの作成:SkinAttrFactory.createPrefixFactory(@Nullable String prefix)
  • タグ属性解析ファクトリの作成:SkinAttrFactory.createNamespaceFactory()
  • 属性解析構成の変更:SkinManager.setSkinAttrFactory(SkinAttrFactory factory)
  • 2.スキンケア属性SkinAttrSkinAttrは、Skinがサポートする属性記述を定義する.Skinのデフォルトでは、backgroundtextColorsrcの3つの属性が実装されています.通常、この3つの属性は、ほとんどのコントロール属性の要件を満たしています.SkinAttrSupportは、SkinAttrを管理するために使用され、すなわち、SkinAttrSupportに登録された属性のみが属性解析ファクトリによって注目され、他の追加の属性を処理することなく、SkinAttrの3つのデフォルト実装がデフォルトで登録されている.
    カスタム属性の拡張サポート
  • は、viewが属性をどのように使用するかを記述するためにSkinAttrサブクラス実装SkinAttr.apply(View)抽象方法を実装する.
  • サブクラス呼び出しSkinAttrSupport.addSupportAttr(String attrName, SkinAttr skinAttr)メソッドを構成すると、カスタム属性を追加できます.サポートされているプロパティは、同じSkinAttrSupport.removeSupport(String attrName)で削除できます.

  • 3.スキンケアマネージャーSkinManagerSkinManagerは皮膚交換庫全体の管理器であり、主に皮膚の負荷、更新、傍受者に更新を通知するなどを処理する.SkinManagerは使用前に初期化する必要があり、Application.onCreate()の方法で初期化することを推奨する.関連Api:
  • public void init(Context context)初期化
  • public boolean isUseSkin()現在皮膚
  • を切替えるかどうか
  • public void changeSkin(String suffix)は接尾辞で皮膚を切り替えます.
  • public void loadSkin(String skinPath, final SkinLoadListener listener)指定されたパスの皮膚プラグインファイルをロードして皮膚を交換します.
  • public void loadSkin(String skinPath, @Nullable final String suffix, final SkinLoadListener listener)指定したパスの皮膚プラグインファイルをロードして皮膚を交換し、ファイルの皮膚属性接尾辞を指定します.
  • public void addSkinChangedListener(SkinChangedListener listener)皮膚変化モニター
  • を追加
  • public void removeSkinChangedListener(SkinChangedListener listener)皮膚変化モニター
  • を除去する.
  • public void notifySkinChangedListeners()皮膚更新
  • を通知する.
  • public void setIgnoreWhenAttrNotFound(boolean ignore)リソースが見つからない場合に設定を無視するかどうかを設定します.デフォルトはtrue
  • です.
  • public void setSkinAttrFactory(SkinAttrFactory factory)プロパティ解析ファクトリを設定し、デフォルトではタグプロパティ解析ファクトリを使用します.

  • 4.界面皮膚交換依頼SkinDelegateSkinDelegateは、界面で皮膚を交換するために必要な処理を含む.その主な機能は、コントロールのロード方法や、インタフェースで肌を変えるコントロール管理、対応するインタフェースのリフレッシュなどの処理を記述することです.関連Api:
  • public void beforeCallSuperOnCreate()は、Activity呼び出しsuper.onCreate()の前に呼び出される.インタフェースを設定ためのレイアウトローダLayoutInflaterFactory
  • public void afterCallSuperOnCreate()は、Activity呼び出しsuper.onCreate()の後に呼び出される.ステータスバーの色を切り替えるなど、私のeasyライブラリの透明なステータスバーで実現することをお勧めします.
  • public void onDestroy()は、ActivityonDestroy()メソッドにおいて呼び出され、インタフェースを除去してコールバックをリフレッシュし、リソース回収などの処理(処理は不要)を行う.
  • public void setEnableSkinSwitchAnim(boolean mEnableSkinSwitchAnim)コントロールがトピックを切り替えるときにアニメーション(デフォルトFade in)を使用することを許可するかどうかは、デフォルトでオンです.
  • public void setIsSkinSwitchAnimAlways(boolean mIsSkinSwitchAnimAlways)皮膚の切り替えが必要なview属性が変更されていない場合にもアニメーションの切り替えがあるかどうかを設定します.デフォルトはfalse
  • です.
    SkinDelegateを管理したくない場合は、BaseSkinActivityをプログラム内のActivityのベースクラスとして使用し、SkinDelegateの実装を代行することができる.すでに規模のある工事については、すでに独自のBaseActivityがあるかもしれないが、BaseSkinActivityに倣ってSkinDelegateを管理すればよい.