前提・実現したいこと
TimePickerはAndroid端末に設定された言語に従って表示されるようですが、例えば韓国語と設定されている場合でも英語表記で表示したい場合、どのようにすれば良いでしょうか?
日本語以外の言語は全て英語としてリリースしたいアプリを開発しているための質問です。
試したこと
「TimePicker 言語固定」
「TimePicker 言語設定」
「TimePicker Language 設定」などで検索
補足情報(FW/ツールのバージョンなど)
Android Studio3.4
Android API14から28対象
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
AndroidのViewはContextが保持している Configuration というクラスからLocaleの設定を読み込んでいます。このLocaleを変更した状態のContextを生成し、TimePickerの生成時に渡すようにすればOKです。
追記: Android N未満ではLocale.getDefault()の値を書き換える必要があったので、それに対する対策コードも追記しました。TimePickerの代わりにCustomLocaleTimePickerをxml内に埋め込む等して利用してください。
java
1public class CustomLocaleTimePicker extends TimePicker { 2 3 public CustomLocaleTimePicker(Context context) { 4 this(context, null); 5 } 6 7 public CustomLocaleTimePicker(Context context, @Nullable AttributeSet attrs) { 8 this(context, attrs, Resources.getSystem().getIdentifier("timePickerStyle", "attr", "android")); 9 } 10 11 public CustomLocaleTimePicker(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { 12 super(new ContextLocaleWrapper(context, Locale.US), attrs, defStyleAttr); 13 14 ((ContextLocaleWrapper) getContext()).resetDefaultLocale(); 15 } 16 17 private static class ContextLocaleWrapper extends ContextThemeWrapper { 18 19 @Nullable 20 private Locale defaultLocale = null; 21 22 private ContextLocaleWrapper(Context context, Locale locale) { 23 super(context, context.getTheme()); 24 25 Configuration configuration = new Configuration(context.getResources().getConfiguration()); 26 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 27 configuration.setLocale(locale); 28 configuration.setLayoutDirection(locale); 29 } else { 30 configuration.locale = locale; 31 } 32 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 33 applyOverrideConfiguration(configuration); 34 } 35 36 // N未満ではLocaleのデフォルト値を参照してしまうので対策 37 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N && !Locale.getDefault().equals(defaultLocale)) { 38 defaultLocale = Locale.getDefault(); 39 Locale.setDefault(locale); 40 } 41 } 42 43 public void resetDefaultLocale() { 44 // N未満で書き換えたLocaleのデフォルト値を元に戻す 45 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N && defaultLocale != null) { 46 Locale.setDefault(defaultLocale); 47 } 48 } 49 } 50}
投稿2019/07/30 08:45
編集2019/11/25 23:56総合スコア3131
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/30 13:01 編集
2019/07/30 14:28 編集
2019/07/31 03:21
2019/07/31 13:23 編集
2019/07/31 13:16
2019/07/31 15:46 編集
2019/07/31 15:49
2019/07/31 16:26
2019/08/01 14:21
2019/08/01 14:31
2019/08/01 15:38
2019/08/02 11:46
2019/08/02 13:40