Android API 25在运行时更改语言

Android API 25在运行时更改语言,android,android-7.0-nougat,android-7.1-nougat,Android,Android 7.0 Nougat,Android 7.1 Nougat,我正在尝试在运行时更改语言。它在API 29(android版本10)上运行得非常好。我需要让它工作在牛轧糖7.1.1(API 25)。这是一场噩梦。如果我必须通过设置来更改设备语言,它是有效的。我可以看到正确的绘图表和字符串(strings.xml) 我的目标是使语言切换在运行时发生 我正在onResume()中调用activity.recreate()。屏幕变黑了。我得到一个异常,它指向第58行的onCreate方法。这是我的onCreate和onResume方法: @Override

我正在尝试在运行时更改语言。它在API 29(android版本10)上运行得非常好。我需要让它工作在牛轧糖7.1.1(API 25)。这是一场噩梦。如果我必须通过设置来更改设备语言,它是有效的。我可以看到正确的绘图表和字符串(strings.xml)

我的目标是使语言切换在运行时发生

我正在onResume()中调用activity.recreate()。屏幕变黑了。我得到一个异常,它指向第58行的onCreate方法。这是我的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.UpdatentFilter(Android.graphics.PorterDuffColorFilter,Android.content.res.ColorStateList,Android.graphics.PorterDuff$模式)将错误地重写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:在路径:DexPathList[[zip文件”//data/app/com.example.plasmavietiles-2/base.apk“],NativeLibraryDirectory=[/data/app/com.example.plasmavietiles-2/lib/x86_64,/system/lib64,/vendor/lib64]上找不到类“android.view.view.view$OnUnhandledKeyEventListener” 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,布尔)(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.viewcomat.setonapplywindowinsetlistener(android.view.view,androidx.core.view.onapplywindowinsetlistener)(viewcomat.java:2421) 2020-03-14 22:54:12.326 5972-5972/com.example.plasmavietiles I/art:at-android.view.ViewGroup androidx.appcompat.app.appcompatidelegateimpl.createSubDecor()(appcompatidelegateimpl.java:779) 2020-03-14 22:54:12.326 5972-5972/com.example.plasmavietiles I/art:at void androidx.appcompat.app.appcompatidelegateimpl.ensureubdecor()(appcompatidelegateimpl.java:659) 2020-03-14 22:54:12.326 5972-5972/com.example.plasmavietiles I/art:at void androidx.appcompat.app.appcompatidelegateimpl.setContentView(int)(appcompatidelegateimpl.java:552) 2020-03-14 22:54:12.326 5972-5972/com.example.plasmavietiles I/art:at void androidx.appcompat.app.appcompatiActivity.setContentView(int)(appcompatiActivity.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:at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity,android.os.Bundle)(Instrumentation.java:1118) 2020-03-14 22:54:12.326 5972-5972/com.example.plasmavietiles I/art:at-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: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.plasmaveiteles I/art: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)(Handler.java:102) 2020-03-14 22:54:12.326 5972-5972/com.example.plasmavietiles I/art:at void android.os.Looper.loop()(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.plasmaveiteles I/art:at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object,java.lang.Object[])(Method.java:-2) 2020-03-14 22:54:12.326 5972-5972/com.example.plasmavietiles I/art: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:void com.android.internal.os.ZygoteInit.main(java.lang.String[])(ZygoteInit.java:776)
2020-03-14 22:54:13.956 5972-5983/com.example.Plasmaveiteles I/art:背景部分并发标记扫描GC释放了21(800B)个AllocSpace对象,0(0B)个LOS对象,2个

可能,您仍然使用较新的API。这就是为什么找不到更新的类。我不完全理解您是如何在ft进行API级别切换的。

从更新的代码中,您似乎每次都在
onResume()
方法中调用
recreate()
。这将从根本上导致