Androidナイトモード
5927 ワード
本文はオリジナルで、転載は出典を明記してください.文章のタイトルはナイトモードで、実は私がここで言いたいのはナイトモードではありませんて、Skinライブラリで、Skinライブラリがあって、分を分けて肌を変えるのは小さいCaseで、しかも分を分けて肌を変える機能を実現することができます.もちろんやはりその言葉で、そんなにキックアスで、何回も話をしようとしなかったので、やはり前の図で話しました.
画像の内容を簡単に紹介します:私はapkの中で普通のモードと夜間のモードの2セットの値を内蔵して、しかも外付けの皮膚の中でも普通のモードと夜間のモードを内蔵しました.
ezgif-3-d97abc2e86.gif
GithubでSkinライブラリのWikiをリリースするため、Android開発で肌を入れ替える機能を実現しました.スターの皆様を歓迎します.以下はWikiの内容です.
前に言った
Skinのクイック使用この記事では、このライブラリをすばやく使用して肌を交換する方法を紹介し、日常の肌交換のニーズを基本的に満たしています.この記事では、Skinライブラリの特徴を重点的に紹介します.
スキンケアの要件
新しい工事でスキンケア機能を使用する準備ができていても、既存の工事でスキンケア機能を使用する準備ができていても、唯一の要求はスキンケアが必要な資源を規範的に管理する必要があります.この規範の管理は資源の命名/分類を指します.命名とは、リソースの名前に一定の規範があり、勝手な命名ではなく、分類とは、どのリソースが肌を交換する必要があるかを知ることができることを意味します.どんな肌の入れ替え方法を使ってもSkinが適用されなくても、この規範は極めて重要であることを覚えておいてください.
Skin詳細
1.属性解析工場
プレフィックス属性解析プラント前提:工事中に肌を変える必要がある属性を固定的な接頭辞で命名することを要求し、ユーザーは任意の接頭辞を設定することができ、Skinはデフォルトで 利点:接頭辞をルールとして肌の属性を区別するため、この方式はすでに規模のある工事で肌の機能を実現するのに役立つことが多い.資源の名前だけを修正して引用資源の場所(例えばレイアウトファイル)を修正しなくても資源の整理を実現することができるので、資源の名前を修正するときに引用を修正することを覚えておくことができるからだ. 欠点:解析時に各レイアウトファイルの要素が自動的に解析されるため、効率的には次のタグ属性解析工場に及ばない.
タグ属性解析工場前提:皮膚を交換するコントロールにマークを追加する必要があります. の利点:タグを含むコントロールのみを解析するため、解析効率が向上し、新しいエンジニアリングにとってこの方法を採用するとより良い. 欠点:マークが必要なため、すでに規模のある工事に与える労力の仕事が多くなります.
独自の属性解析方式を拡張することができ、SkinAttrFactoryを継承するだけでよい.Skinデフォルト設定フラグ属性解析ファクトリでは、SkinManagerで構成を変更できます.
相関Api接頭辞属性解析ファクトリの作成: タグ属性解析ファクトリの作成: 属性解析構成の変更: 2.スキンケア属性
カスタム属性の拡張サポートは、viewが属性をどのように使用するかを記述するために サブクラス呼び出し
3.スキンケアマネージャー を切替えるかどうか を追加 を除去する. を通知する. です.
4.界面皮膚交換依頼 です.
SkinDelegateを管理したくない場合は、
画像の内容を簡単に紹介します:私は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")の属性はサポートされていません.プレフィックス属性解析プラント
PrefixSkinAttrFactory
PrefixSkinAttrFactory
属性を解析するルールは、特定の接頭辞を含む属性を解析することであり、eg:skin_login_bg.jpg
である.PrefixSkinAttrFactory
は、レイアウトファイルの各ビューのプロパティを順次解析します.skin
を接頭辞とする.タグ属性解析工場
NamespaceSkinAttrFactory
NamespaceSkinAttrFactory
プロパティを解析するルールは、レイアウトファイルにhttp://schemas.android.com/android/skin
ネーミングスペースを追加し、タグを追加したコントロールプロパティを解析することです.eg:
独自の属性解析方式を拡張することができ、SkinAttrFactoryを継承するだけでよい.Skinデフォルト設定フラグ属性解析ファクトリでは、SkinManagerで構成を変更できます.
相関Api
SkinAttrFactory.createPrefixFactory(@Nullable String prefix)
SkinAttrFactory.createNamespaceFactory()
SkinManager.setSkinAttrFactory(SkinAttrFactory factory)
SkinAttr
SkinAttr
は、Skinがサポートする属性記述を定義する.Skinのデフォルトでは、background
、textColor
、src
の3つの属性が実装されています.通常、この3つの属性は、ほとんどのコントロール属性の要件を満たしています.SkinAttrSupport
は、SkinAttr
を管理するために使用され、すなわち、SkinAttrSupport
に登録された属性のみが属性解析ファクトリによって注目され、他の追加の属性を処理することなく、SkinAttr
の3つのデフォルト実装がデフォルトで登録されている.カスタム属性の拡張サポート
SkinAttr
サブクラス実装SkinAttr.apply(View)
抽象方法を実装する.SkinAttrSupport.addSupportAttr(String attrName, SkinAttr skinAttr)
メソッドを構成すると、カスタム属性を追加できます.サポートされているプロパティは、同じSkinAttrSupport.removeSupport(String attrName)
で削除できます.3.スキンケアマネージャー
SkinManager
SkinManager
は皮膚交換庫全体の管理器であり、主に皮膚の負荷、更新、傍受者に更新を通知するなどを処理する.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.界面皮膚交換依頼
SkinDelegate
SkinDelegate
は、界面で皮膚を交換するために必要な処理を含む.その主な機能は、コントロールのロード方法や、インタフェースで肌を変えるコントロール管理、対応するインタフェースのリフレッシュなどの処理を記述することです.関連Api:public void beforeCallSuperOnCreate()
は、Activity
呼び出しsuper.onCreate()
の前に呼び出される.インタフェースを設定ためのレイアウトローダLayoutInflaterFactory
public void afterCallSuperOnCreate()
は、Activity
呼び出しsuper.onCreate()
の後に呼び出される.ステータスバーの色を切り替えるなど、私のeasyライブラリの透明なステータスバーで実現することをお勧めします.public void onDestroy()
は、Activity
のonDestroy()
メソッドにおいて呼び出され、インタフェースを除去してコールバックをリフレッシュし、リソース回収などの処理(処理は不要)を行う.public void setEnableSkinSwitchAnim(boolean mEnableSkinSwitchAnim)
コントロールがトピックを切り替えるときにアニメーション(デフォルトFade in)を使用することを許可するかどうかは、デフォルトでオンです.public void setIsSkinSwitchAnimAlways(boolean mIsSkinSwitchAnimAlways)
皮膚の切り替えが必要なview属性が変更されていない場合にもアニメーションの切り替えがあるかどうかを設定します.デフォルトはfalse SkinDelegateを管理したくない場合は、
BaseSkinActivity
をプログラム内のActivityのベースクラスとして使用し、SkinDelegate
の実装を代行することができる.すでに規模のある工事については、すでに独自のBaseActivity
があるかもしれないが、BaseSkinActivity
に倣ってSkinDelegate
を管理すればよい.