Androidアプリにダークテーマを含める方法

開発者にとって、Androidアプリの作成は簡単なプロセスです。魅力的なUIの設計は実際には難しいことです。 そのため、シンプルで魅力的なUIを作成するためのインスピレーションを必要とする開発者向けに、「吸わないAndroidアプリUIを設計する方法」ガイドを作成しました。 このガイドでは、アプリにダーク/ナイトモードテーマを追加することを簡単に説明しました。このガイドでは、それを順を追って説明します。

ダーク/ナイトモードテーマをアプリに追加することは、ユーザーにとって素晴らしいオプションです。バッテリー寿命を節約し、夜間の目にはずっと簡単です。 黒のテキストに白い背景、またはUIの「明るい」色の任意の組み合わせは、特に夜間に目にストレスを与えます。 このように、テキストが明るい暗い背景はストレスが少なく目に害が少ないため、多くの人気アプリが暗いテーマ(最近ではYouTubeとRedditを含む)を開始しました。 5月。

Androidアプリにトグル可能なダークモードを簡単に追加したい場合は、このAppualsガイドに従い、問題が発生した場合はコメントしてください!

XML属性の作成

最初に、テーマを処理するXML属性ファイルを作成する必要があります。 AndroidはこのXMLを介して属性の色をネイティブに変更できるため、2つの異なるテーマのAPKに2セットのリソースを含めてAPKサイズを大きくするよりもはるかに優れています。

したがって、アプリの「リソース」フォルダーで、 attrs.xmlという名前のファイルを作成し、次の行を追加します( これらはスタイル設定可能な属性です)。

Lollipopより前は、ドロアブルの属性を指定できなかったため、ドロアブルのリソースIDを指定する必要がありましたが、これは当てはまりません。

スタイルを追加する

これを機能させるには、同じベースを共有する2つの個別のスタイルを作成する必要があります。 最初のものは明らかにあなたの主要な「明るい」テーマになり、2番目は「暗い」テーマになります。

 #F4F4F6#96F4F4F6 #FFFF#F2F2F3 @ drawable / i_light_plholder#33343B / item>#8033343B#28292e#F2F2F3 @ drawable / i_dark_pholder 

特定のアクティビティの実際のスタイルは次のとおりです。

 #F4F4F6#33343B 

これらのテーマのいずれかをアプリのアクティビティのマニフェストに指定する必要があります。この場合はFeedActivityです。

ビューのスタイル設定

ビューのスタイル設定の例を次に示します。この例では、「ページが見つかりません」リダイレクトエラーを示しています。

動的テーマ切り替えを有効にする方法

動的なテーマ切り替えを有効にする最も効率的な方法は、Singletonパターンを使用して設定をApplicationインスタンスに保存するために使用されるSharedPreference値をロードすることです。つまり、各アクティビティの開始時に設定を行う必要はありません。

 パブリッククラスAppはApplicationを拡張します{public static final String TAG = "App"; private boolean isNightModeEnabled = false; @Override public void onCreate(){super.onCreate(); //ここでナイトモード状態をロードしますSharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(this); this.isNightModeEnabled = mPrefs.getBoolean(“ NIGHT_MODE”、false); } public boolean isNightModeEnabled(){return isNightModeEnabled; } public void setIsNightModeEnabled(boolean isNightModeEnabled){this.isNightModeEnabled = isNightModeEnabled; }} 

このインスタンスは他の何よりも先に起動されるため、アプリを開いた後は、アプリに属する​​任意のアクティビティで、必要なときにisNightModeEnabled()ブール値を呼び出すことができます。

 パブリック最終クラスFeedActivityはAppCompatActivityを拡張します{private final static String TAG =“ FeedActivity”; @Override protected void onCreate(Bundle savedInstanceState){if(MyApplication.getInstance()。isNightModeEnabled()){setTheme(R.style.FeedActivityThemeDark); } super.onCreate(savedInstanceState); setContentView(R.layout.activity_feed); }} 

ただし、マニフェストファイルで指定されているテーマとは異なるテーマを適用する場合は、親のonCreate()メソッドを呼び出す前に行う必要があります

AppCompatを使用して状態を設定する

AppCompatはさまざまな用途に非常に役立ちます。この場合、モードの状態を設定するためにAppCompatを使用します。 これは、キャッシュされた状態を作成するためにアプリインスタンスを使用する必要がなくなり、アプリのキャッシュの膨張を削減することを意味します( 非常に小さなマージンですが )。

 AppCompatDelegate .setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); 

ここでは、次のいずれかを使用できます。

  • AppCompatDelegate.MODE_NIGHT_YES

    AppCompatDelegate.MODE_NIGHT_NO

    AppCompatDelegate.MODE_NIGHT_AUTO

状態の取得

 AppCompatDelegate.getDefaultNightMode(); パブリック最終クラスFeedActivityはAppCompatActivityを拡張します{private final static String TAG =“ FeedActivity”; @Override protected void onCreate(Bundle savedInstanceState){if(AppCompatDelegate.getDefaultNightMode()== AppCompatDelegate.MODE_NIGHT_YES){setTheme(R.style.FeedActivityThemeDark); } super.onCreate(savedInstanceState); setContentView(R.layout.activity_feed); }} 

カスタマイズして値を好みに合わせて調整できますが、このガイドは、Androidアプリにネイティブのダークテーマを含めることから始めるための優れた入門書です。

興味深い記事