[解決済み] ユーザーが言語を選択したときに、アプリの言語を変更するには?
質問
スペイン語、ポルトガル語、英語の3ヶ国語をサポートするアプリを作りたいのですが、アプリ内で言語を選択するオプションはありますか?そして、アプリ内で言語を選択するオプションを与えます。
1) 3つのdrawableフォルダ drawable-es, drawable-pt, drawable.
2) valuesフォルダ values-es,values-pt,valuesの3つ。言語に応じてString.xmlの値を変更する。
言語選択用のimageViewがあり、クリックすると英語、スペイン語、ポルトガル語のメニューが表示されます。
オプションの選択時に、以下のコードでアプリ内のロケールを設定しています。
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.en:
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, "Locale in English !", Toast.LENGTH_LONG).show();
break;
case R.id.pt:
Locale locale2 = new Locale("pt");
Locale.setDefault(locale2);
Configuration config2 = new Configuration();
config2.locale = locale2;
getBaseContext().getResources().updateConfiguration(config2, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, "Locale in Portugal !", Toast.LENGTH_LONG).show();
break;
case R.id.es:
Locale locale3 = new Locale("es");
Locale.setDefault(locale3);
Configuration config3 = new Configuration();
config3.locale = locale3;
getBaseContext().getResources().updateConfiguration(config3, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, "Locale in Spain !", Toast.LENGTH_LONG).show();
break;
}
return super.onOptionsItemSelected(item);
}
私はマニフェストで android:configChanges="ロケール"。
動作はするのですが、いくつか問題があります。
問題点:-。
1)言語選択時に、言語選択の画像で構成される画面は変化せず、他の画面が変化する。
2)方向転換後、ロケールに合わせて言語を復元する。
どのように解決するのですか?
ウェブページの抜粋です。 http://android.programmerguru.com/android-localization-at-runtime/
ユーザーが言語リストから言語を選択すると、アプリの言語を変更するのは簡単です。以下のように、ロケールを文字列で受け取るメソッドを用意し(英語なら「en」、ヒンディー語なら「hi」)、アプリのロケールを設定し、現在のアクティビティを更新して言語の変更を反映させます。適用したロケールは、再度手動で変更するまで変更されません。
public void setLocale(String lang) {
Locale myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, AndroidLocalize.class);
finish();
startActivity(refresh);
}
以下のパッケージがインポートされていることを確認してください。
import java.util.Locale;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.util.DisplayMetrics;
アクティビティにマニフェストを追加する android:configChanges="locale|orientation"
関連
-
[解決済み] ViewPagerでFragmentが表示されるタイミングを決定する方法
-
[解決済み] Androidでプログラムによるアプリの言語変更
-
[解決済み] Firebaseでアプリがバックグラウンドにあるときの通知を処理する方法
-
[解決済み】プログレスダイアログとバックグラウンドスレッドがアクティブなときに、画面の向きが変わるのをどう処理するか?
-
[解決済み】AndroidでTextViewのfontFamilyを変更する方法
-
[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
-
[解決済み] ArrayAdapter<myClass> の使用方法
-
[解決済み] Studio 3.4 をアップデートしたら、引数の leftShift() メソッドが見つかりませんでした。
-
[解決済み] edittextのテキストがメールアドレスかどうかを確認するには?
-
[解決済み] サポートライブラリのアクションバーをPreferenceActivityに追加するには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SDカードからファイルを削除する方法を教えてください。
-
[解決済み] RecyclerView.Stateを使って、RecyclerViewのスクロール位置を保存するには?
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] Android Navigation Architecture Component - 現在表示されているフラグメントを取得する
-
[解決済み] DialogFragmentを正しく終了させるには?
-
[解決済み] アンドロイドでシェイクを検出するには?
-
[解決済み] Android StudioからADBを手動で再起動する方法
-
[解決済み] キャンバスに複数行のテキストを描画する
-
[解決済み] 非推奨のandroid.support.v4.app.ActionBarDrawerToggleの置き換え方法
-
[解決済み] Recyclerviewと異なるタイプの行のインフレーションの処理