Androidxへの移行後、ロケールの変更が効かない
質問
私は多言語をサポートする古いプロジェクトを持っています。私はサポートライブラリとターゲットプラットフォームをアップグレードしたい。
に移行する前に
Androidx
に移行する前は、すべてうまくいっていたのですが、今は言語を変更してもうまくいきません。
私は、アプリのデフォルトロケールを変更するために、このコードを使用します。
private static Context updateResources(Context context, String language)
{
Locale locale = new Locale(language);
Locale.setDefault(locale);
Configuration configuration = context.getResources().getConfiguration();
configuration.setLocale(locale);
return context.createConfigurationContext(configuration);
}
そして、各アクティビティでこのメソッドをオーバーライドして呼び出します。
attachBaseContext
のようにします。
@Override
protected void attachBaseContext(Context newBase)
{
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
String language = preferences.getString(SELECTED_LANGUAGE, "fa");
super.attachBaseContext(updateResources(newBase, language));
}
他の方法で文字列を取得しようとしたところ、以下のことに気がつきました。
getActivity().getBaseContext().getString
が動作し
getActivity().getString
は動作しません。以下のコードでもうまくいかず、常に
app_name
が表示されます。
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"/>
のサンプルコードを共有します。 https://github.com/Freydoonk/LanguageTest
また
getActivity()..getResources().getIdentifier
は動作せず、常に 0 を返します。
どのように解決するのですか?
最後に、私は自分のアプリで問題を見つけました。プロジェクトを
Androidx
に移行したところ、プロジェクトの依存関係がこのように変わってしまいました。
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.1.0-alpha03'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.1.0-alpha04'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0-alpha02'
}
見ての通り
androidx.appcompat:appcompat
は
1.1.0-alpha03
に変更したところ、最新の安定版では
1.0.2
に変更したところ、私の問題は解決し、変更言語が正常に動作するようになりました。
私は、最新の安定版である
appcompat
ライブラリは
Maven リポジトリ
. また、他のライブラリも最新の安定版に変更しています。
これで、私のアプリの依存関係セクションは以下のようになります。
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.0.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
関連
-
[解決済み] Androidがデフォルトではなく、現在のロケールを取得する
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] Android Navigation Architecture Component - 現在表示されているフラグメントを取得する
-
[解決済み] AsyncTaskを複数回実行する
-
[解決済み] 文字サイズとアンドロイドの画面サイズの違い
-
[解決済み] 非ActivityクラスでContextを取得する [重複].
-
[解決済み] google-services.jsonって実際何してるの?
-
[解決済み] androidXのライブラリにないBottomSheetBehavior
-
[解決済み] AndroidXへの移行後、android.support.design.が解決できない。
-
[解決済み] androidxへの移行後、androidx.constraintlayout.ConstraintLayoutのクラスが膨らんでしまう不具合
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Androidでプログラムによるアプリの言語変更
-
[解決済み] プログラムによるロケールの設定
-
[解決済み] handler.postDelayed()を停止する。
-
[解決済み] AppCompat-v7 21でアクションバー/ツールバーにアイコンを表示する。
-
[解決済み] Android Studio - あいまいなメソッド呼び出し getClass()
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] グリッドビューの高さが削減される
-
[解決済み] AsyncTaskLoaderとAsyncTaskの比較
-
[解決済み] サポートライブラリのアクションバーをPreferenceActivityに追加するには?
-
[解決済み] Android context.getResources.updateConfiguration() deprecated