当前位置: 首页 > 知识库问答 >
问题:

Android API 25在运行时更改语言

贲宜春
2023-03-14

我正在尝试在运行时更改语言。它在API29(android版本10)上运行得很好。我需要使它在牛轧糖7.1.1(API 25)上工作。这是一场噩梦。如果我必须通过设置更改设备语言..,它可以工作。我可以看到正确的drawable和字符串(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 135 33-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)将错误地重写...原因:java.lang.ClassNotFoundException:在路径: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 597 2-5972/com.example.PlasmaVietiles I/ART:at java.lang.classnsetsListener)(viewcompat.java:2421)2020-03-14 22:54:12.326 597 2-5972/com.example.plasmaVietiles I/ART:at Android.view.viewGroup androidx.appcompat.appcompatedelegateimpl.createSubdecor()(appcompatedelegateimpl.java:779)2020-03-14 22:54:12.326 597 2-5972/com.example.plasmaVietiles I/ART:at voidy.PerformCreate(Android.os.bundle)(Activity.java:6679)2020-03-14 22:54:12.326 597-5972/com.example.PlasmaVietiles I/ART:at void Android.app.Instrumentation.callActivityCreate(Android.app.Activity,Android.os.bundle)(Instrumentation.java:1118)2020-03-14 22:54:12.326 597-5972/com.example.PlasmaVietiles I/ART:at Android.app.Activity Android.app.ActivityThread.PerformLaunchActivity(2:54:12.326 597 2-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 597 2-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 597 2-5972.internal.os.zygoteinit.main(java.lang.String[])(zygoteinit.java:776)2020-03-14 22:54:13.956 597 2-5983/com.example.PlasmaVietiles I/ART:后台部分并发标记扫描GC释放了21个(800b)分配空间对象,0个(0b)丢失对象,2个

共有2个答案

蒋健
2023-03-14

从更新的代码来看,您似乎每次都在onResume()方法中调用recreate()。这实质上会导致一个无限循环:

  • activity启动并贯穿于各种生命周期方法
  • onResume()称为
  • recreate()称为
  • 重新启动activity并运行各种生命周期方法
  • onResume()称为
  • recreate()称为
  • ...

您必须想出一些方法,只在必要时调用recreate()

公冶光亮
2023-03-14

很可能,您仍然使用较新的API。这就是为什么新的类没有被发现。我不完全理解你是如何在FT进行API级别切换的。

 类似资料:
  • 问题内容: 我希望能够在运行时在Swing应用程序中更改语言环境,并使用来自新语言环境的ResourceBundle的本地化文本来更新屏幕上的所有文本元素。 是否可以在不自定义摆动组件或为处理呈现本地化文本的所有组件创建UIDelegates的情况下完成此操作? 如果没有,那么我可以考虑实施什么好的解决方案? 问题答案: 您有一种方法可用于更改应用程序区域设置(并可能保留新值),而另一种方法可用于

  • 问题内容: 我正在使用FXML中描述的核心组件制作JavaFX桌面应用程序,我想为用户提供更改语言的选项。但是,一旦从FXML加载了组件,我还没有找到任何直接的方法来更改语言。 问题是,有什么标准方法可以处理JavaFX中的语言切换。 问题答案: 你可以做这样的事情。正如您在回答中一样,您可能希望将其实现为单例,或者使用DI框架在需要的地方注入单个实例: 现在,您可以执行以下操作: 而且任何时候您

  • 问题内容: 如何在运行时更新此环境变量,以便ctypes可以在任何地方加载库?我尝试了以下方法,但似乎都没有用。 问题答案: 在运行诸如Python之类的程序时,动态加载程序(ld.so.1或类似的文件)已经读取LD_LIBRARY_PATH,并且此后将不会注意到任何更改。因此,除非Python软件本身评估LD_LIBRARY_PATH并使用它来构建可能的库路径名或要使用的等效函数,否则在脚本中设

  • 问题内容: 我想向管理界面公开一些(特定于应用程序的)设置,以便用户可以轻松地更改它们,也不必重新启动Django。 我应该怎么做? 我在http://djangopackages.com/grids/g/live-setting/上签出了应用程序(btw django-constance最吸引人),但实际上所有这些应用程序所做的就是将值存储在数据库中,从而提供了一个网站。界面来更改它们,并进行缓

  • 我有个关于骆驼和计时器的问题。我有几个计时器,其中一个我想在运行时更新。我正在使用osgi blueprint来配置适当的周期。因此,我如何改变计时器(名称,我知道),例如从路由?