質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

3062閲覧

android ダークテーマ切り替え 再起動なしで行う方法

kasai2_s_2_s

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2021/05/30 15:41

編集2021/05/30 15:54

実現したいこと

アプリ内で、ライトテーマとダークテーマを手動で切り替える機能を実装したいのですが、切り替え時にアクティビティを再起動せずにテーマを切り替える方法はありますか?

具体的なイメージは、以下の画像のようにアクティビティの再起動なしで、テーマや色のみを変える処理を実現したいです。
!イメージ説明
from : https://blog.iamsuleiman.com/daynight-theme-android-tutorial-example/

どなたかお詳しい方、ご教授頂けると幸いです。

### 現状
使用言語:Java

ライトテーマ、ダークテーマそれぞれのリソースファイルはすでに用意できており、端末で設定したテーマによって、アプリのテーマを設定することができています。

さらに、下記のコード等を用いて、アプリ内での手動でのテーマの切り替えを実装しましたが、下記のメソッドを使うと、アクティビティを再起動した後にテーマを適用し直すようで、一度消えて、また再開する、というような、見た目が実現したい内容と違ってしまいます。

Java

1AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); 2AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/05/30 21:29

AppCompatDelegate.setDefaultNightMode を呼ぶと、画面回転時などと同様に Activity が再生成されるようなので、ViewModel などを使って Activity の再生成を正しくハンドリングする必要があるのでは。
guest

回答1

0

自己解決

参考資料
https://proandroiddev.com/daynight-applying-dark-mode-without-recreating-your-app-c8a62d51092d

マニフェストファイルの手動切り替えするアクティビティ層に

android:configChanges="uiMode" 

を加え、そのアクティビティ内で

onConfigurationChanged

を定義し、そこでテーマの切り替えを行うことにより、再起動なしで実現できるようです。

以下例

マニフェスト <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:configChanges="uiMode"> ///////// これを加える <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
アクティビティ override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) val nightModeFlags = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK if (nightModeFlags == Configuration.UI_MODE_NIGHT_NO){ // ライトテーマに変更する処理を記述 }else{ // ダークテーマに変更する処理を記述 } }

しかしこれのみを行うと、切り替えを行ったアクティビティのみテーマが切り替わりません(他アクティビティは切り替わる)。なので、切り替えを行ったアクティビティのみ、テーマ変更ではなく色の差し変えを行えば、擬似的にテーマ変更が行えます。例えば、以下のようにcolorリソースにライトテーマ用の色とダークテーマ用の色をどちらも同じリソースファイルに定義しておけば、色の差し替えが可能になります。onConfigurationChanged内で、アクティビティ内のviewやら何やらに個々に色差し替える処理を行います。

<color name="colorPrimary">#fff</color> <color name="colorPrimaryDark">#fff</color> <color name="colorAccent">#D81B60</color> <color name="colorText">#1A1A1A</color> //ナイトモードの色も用意する <color name="colorPrimaryNight">#000</color> <color name="colorPrimaryDarkNight">#000</color> <color name="colorTextNight">#dcdcdc</color>

参考資料
https://proandroiddev.com/daynight-applying-dark-mode-without-recreating-your-app-c8a62d51092d

投稿2021/06/14 17:06

kasai2_s_2_s

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問