Android API 25 Изменение языка во время выполнения - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь изменить язык во время выполнения. Он отлично работал на API 29 (android версия 10). Мне нужно, чтобы он работал на Nougat 7.1.1 (API 25). Это был кошмар. Если мне нужно изменить язык устройства через настройки .., это работает. Я вижу правильные элементы рисования и строки (строки. xml)

Моя цель - сделать так, чтобы переключение языка произошло во время выполнения.

Я вызываю activity.recreate () в onResume (). Экран становится черным. Я получаю исключение, и оно указывает на метод onCreate в строке 58. Это мои методы onCreate и onResume:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);    // this is the line 58
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


...
}



@Override
    protected void onResume() {
        super.onResume();
        hideSystemUI();
        prepareVideoPlayback();

       locale = new Locale("en");

       recreate();
    }

2020-03-14 23: 49: 32.400 13533-13533 / com.example .plasmavietiles W / art: До Android 4.1, метод android .graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter (android .graphics.PorterDuffColorFilter, * 101. *. android .graphics.PorterDuff $ Mode) неправильно переопределил бы закрытый для пакета метод в android .graphics.drawable.Drawable 2020-03-14 23: 49: 32.422 13533-13533 / com.example.plasmavietiles I / art: Отклонение повторного инициирования для ранее неудачного класса java .lang.Class: java .lang.NoClassDefFoundError: Ошибка разрешения: Landroid / view / View $ OnUnhandledKeyEventListener; ... Вызвано: java .lang.ClassNotFoundException: не найден класс "android .view.View $ OnUnhandledKeyEventListener" по пути: DexPathList [[файл zip "/data/app/com.example.plasmavietiles- 2 / base.apk "], nativeLibraryDirectories = [/ data / app / com.example.plasmavietiles-2 / lib / x86_64, / system / lib64, / vendor / lib64]] 2020-03-14 22: 54: 12.325 5972 -5972 / com.example.plasmavietiles I / art: at java .lang.Class dalvik.system.BaseDexClassLoader.findClass (java .lang.String) (BaseDexClassLoader. java: 56) 2020-03-14 22: 54: 12.325 5972-5972 / com.example.plasmavietiles I / art: at java .lang.Class java .lang.ClassLoader.loadClass (java .lang.String, boolean) (ClassLoader. java: 380) 2020-03-14 22: 54: 12.325 5972-5972 / com.example.plasmavietiles I / art: at java .lang.Class java .lang.ClassLoader.loadClass (java. lang.String) (ClassLoader. java: 312) 2020-03-14 22: 54: 12.325 5972-5972 / com.example.plasmavietiles I / art: at void androidx.core.view.ViewCompat.setOnApplyWindowInsetsListener (android .view.View, androidx.co re.view.OnApplyWindowInsetsListener) (ViewCompat. java: 2421) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles I / art: at android .view.ViewGroup androidx.appcompat. app.AppCompatDelegateImpl.createSubDecor () (AppCompatDelegateImpl. java: 779) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles. () (AppCompatDelegateImpl. java: 659) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles I / art: at void androidx.appcompat.app.AppCompatDelegateImpl.setContentView (int) (AppCompatDelegate . java: 552) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles I / art: at void androidx.appcompat.app.AppCompatActivity.setContentView (int) (AppCompatActivity. java : 161) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles I / art: at void com.example.plasmavietiles.MainActivity.onCreate (android .os.Bundle) (MainActivity. java: 58) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles I / art: at void android .app.Activity.performCreate (android .os.Bundle) (Activity. java: 6679) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles I / art: void android .app.Instrumentation.callActivityOnCreate (android .app.Activity, android .os.Bundle) (Инструментарий. java: 1118) 2020-03-14 22:54: 12.326 5972-5972 / com.example.plasmavietiles I / art: at android .app.Activity android .app.ActivityThread.performLaunchActivity (android .app.ActivityThread $ ActivityClientRecord, android .content.Intent) (ActivityThread. java: 2618) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles I / art: void android .app. ActivityThread.handleLaunchActivity (android .app.ActivityThread $ ActivityClientRecord, android .content.Intent, java .lang.String) (ActivityThread. java: 2726) 2020-03-14 22: 54: 12.326 5972 -5972 / com.example.plasmavietiles I / art: at void android .app.ActivityThread.-wrap12 (android .app.ActivityThread, android .app.ActivityThread $ ActivityClientRecord, android .content.Intent , java .lang.String) (ActivityThread. java: - 1) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles I / art: at void android .app. ActivityThread $ H.handleMessage (android .os.Message) (ActivityThread. java: 1477) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles I / art: at void android .os.Handler.dispatchMessage (android .os.Message) (Обработчик. java: 102) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles I / art: at void android .os.Looper.l oop () (Looper. java: 154) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles I / art: at void android .app.ActivityThread.main (java .lang.String []) (ActivityThread. java: 6119) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles I / art: at java .lang.Object java .lang.reflect.Method.invoke! (java .lang.Object, java .lang.Object []) (Метод. java: - 2) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles I / art: at void com. android .internal.os.ZygoteInit $ MethodAndArgsCaller.run () (ZygoteInit. java: 886) 2020-03-14 22: 54: 12.326 5972-5972 / com.example.plasmavietiles I / art: at void com. android .internal.os.ZygoteInit.main (java .lang.String []) (ZygoteInit. java: 776) 2020-03-14 22: 54: 13.956 5972-5983 / com .example.plasmavietiles I / art: Частичная параллельная разметка фона G C освобождено 21 (800B) объектов AllocSpace, 0 (0B) объектов LOS, 2

Ответы [ 3 ]

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

Из вашего обновленного кода похоже, что вы вызываете recreate() каждый раз в вашем onResume() методе. По сути это приведет к бесконечному l oop:

  • Активность запускается и проходит через различные методы жизненного цикла
  • onResume() называется
  • recreate() называется
  • Деятельность перезапускается и проходит через различные методы жизненного цикла
  • onResume() называется
  • recreate() называется
  • ...

Вам придется придумать какой-то способ, чтобы звонить только recreate(), когда это необходимо.

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

Я нашел ответ на свой вопрос

OnUnhandledKeyEventListener не является частью какого-либо API, более старого, чем API 28. Другими словами, устройство должно запускать API Androdi> = 28.

Это проблема, если вы используете AndroidX на устройствах с API <28. Чтобы решить эту проблему, если вы используете API <28, вы просто должны убедиться, что ваш вызов Activity наследуется от Activity, а не AppCompatActivity. </p>

Заменить этот публицистический c класс MainActivity расширяет AppCompatActivity

на

publi c Класс MainActivity расширяет Activity

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

Возможно, вы все еще используете более новый API. Вот почему новые классы не были найдены. Я не совсем понимаю, как вы делаете переключение уровня API на ft.

...