[Android API 25在运行时更改语言

问题描述 投票:0回答:2

我正在尝试在运行时更改语言。它在API 29(Android版本10)上效果很好。我需要使其在Nougat 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.updateTintFilter(android.graphics.PorterDuffColorFilter ,android.content.res.ColorStateList,android.graphics.PorterDuff $ Mode)错误地覆盖了android.graphics.drawable.Drawable中的package-private方法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”]上找不到类“ android.view.View $ OnUnhandledKeyEventListener” ,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.core.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 I / art:at void androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor()(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)(AppCompatDelegateImpl.java:552)2020-03-14 22:54:12.326 5972-5972 / com.example.plasmavietiles I / art:无效androidx.appcompat.app.AppCompatActivity.setContentView(int)(AppCompatActivity.java:161)2020-03-14 22:54:12.326 5972-5972 / com.example.plasmavietiles I / art:at无效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:无效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 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.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:无效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:无效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:无效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:无效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 [])(Method.java:-2)2020-03-14 22:54:12.326 5972-5972 / com.example.plasmavietiles I / art:at无效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无效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:背景部分并发标记清除GC已释放21(800B)AllocSpace对象,0(0B)LOS对象,2

android android-7.0-nougat android-7.1-nougat
2个回答
0
投票

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


0
投票

从更新后的代码中,看起来您每次在recreate()方法中都调用onResume()。这本质上将导致无限循环:

  • 活动已启动并通过各种生命周期方法运行
  • onResume()被称为
  • recreate()被称为
  • 活动已重新启动并通过各种生命周期方法运行
  • onResume()被称为
  • recreate()被称为
  • ...

您将不得不想出一些方法,仅在必要时才呼叫recreate()

© www.soinside.com 2019 - 2024. All rights reserved.