Android Kotlin смена нескольких языков - PullRequest
0 голосов
/ 18 марта 2020

Android Studio Kotlin change multi-language

Как изменить язык в реальном времени? Потому что на этом изображении, когда я хочу изменить, нужно перезагрузить деятельность.

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Если вы не хотите перезапускать свою деятельность, можете использовать следующий способ

private void updateResource(ViewGroup viewGroup) {
        int count = viewGroup.getChildCount();
        for (int i = 0; i < count; i++) {
            View view = viewGroup.getChildAt(i);
            if (view instanceof ViewGroup)
                updateResource((ViewGroup) view);
            else {
                if(view.getTag()==null){
                    continue;
                }
                int resId = getResources().getIdentifier(view.getTag().toString(), “string”, getPackageName());
                if(view instanceof EditText){
                    EditText editText=(EditText)view;
                    editText.setHint(getString(resId));
                }else if(view instanceof TextView){
                    TextView textView=(TextView) view;
                    textView.setText(getString(resId));
                }else if(view instanceof Button){
                    Button button=(Button) view;
                    button.setText(getString(resId));
                }
            }
        }
    }

Кроме того, в вашем xml макете добавьте тег для каждого представления, в котором есть пример строки:

android:text=“@string/text_example”
android:tag=“text_example”

Надеюсь, это поможет

0 голосов
/ 18 марта 2020

Вы должны сделать две вещи.

  1. обновить язык приложения.

  2. Обновить языковые ресурсы для текущего макета

      fun setSystemLocale(locale:Locale) {
         val context = getApplicationContext()
         val resources = getResources(context)
         val configuration = Configuration()
         setSystemLocale(locale, configuration)
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
         {
            applyLocaleChange(context, configuration)
         }
         else
         {
            applyLocaleChangeLegacy(resources, configuration)
         }
       }
       private fun setSystemLocale(locale:Locale, configuration:Configuration) {
          Locale.setDefault(locale)
          configuration.setLocale(locale)
        }
        private fun applyLocaleChange(context:Context, configuration:Configuration) {
          context.createConfigurationContext(configuration)
        }
        private fun applyLocaleChangeLegacy(resources:Resources, configuration:Configuration) {
          val displayMetrics = resources.getDisplayMetrics()
          resources.updateConfiguration(configuration, displayMetrics)
        }
    

Как только язык вашего приложения обновлен, вам нужно сбросить строковые ресурсы для текущего макета. Теперь приложение будет использовать строки, используя обновленный язык. Вы должны сбросить строки только на этом видимом макете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...