Строковые значения по умолчанию принимаются при смене темы (темный режим), как этого избежать? - PullRequest
0 голосов
/ 05 октября 2019

Я делаю проект, в котором я думал о предоставлении «Локализация» и «Темный режим» для пользователей.

Для достижения локализации -> я определил разные строковые ресурсы для разных локалей в значениях -bn, values-es, values-hi, values-in и т. Д.

Для изменения локали вручную, я использовал этот код ->

         Locale l = new Locale("our_locale_string");//It may be en,hi,..  etc.
        Locale.setDefault(l);
        Configuration config = new Configuration();
        config.locale = l;
        getResources().updateConfiguration(config,getResources().getDisplayMetrics()); 

Я использовал два файла styles.xml для переключения между темами

Для светлой темы:

       <style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="cardViewStyle">@style/CardView</item>
    <item name="android:windowBackground">@android:color/white</item>
      </style>  

Для темногоtheme:

    <style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="cardViewStyle">@style/CardView</item>
    <item name="android:windowBackground">@android:color/black</item>
    </style>  

Для изменения темы в общем приложении я использую ->

     if (mode) {   //mode is a boolean variable to toggle b/n themes
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    } else {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
    }  

Я могу добиться локализации в светлой теме, а также я могу изменить натемный режим для общего приложения. Здесь возникает проблема, когда я меняю тему, соответствующие строки не используются, вместо этого используется стандартный strings.xml (обычно английский). Как я могу сделать это, чтобы использовать соответствующий языковой стандарт strings.xml.

Моя структура каталогов ресурсов в «представлении проекта»

res / values ​​res / values-hi res / values-zh. ,,res / values-es и для ночного режима у меня есть res / values-night / styles.xml

Я также попытался создать файлы ресурсов в режиме nigth для каждого из приведенных выше различных строковых файлов в папках values-xxнапример, значения-привет-ночь, но это не работает.

...