Android系统切换语言的时候APP无法更新资源文件的解决方法

你的APP支持多语言环境,假如它正在后台运行,此时用户去更换系统语言,等系统语言换好后直接从后台打开它,此时用户会发现你的界面语言没有和系统语言保持一致;为什么?主要是界面资源没有重新加载

如果你是属于自己在APP内设置语言切换,那么就可以直接在你设置切换的那个activity里做处理,重新启动一次该activity就可以了,但是如果你的APP和我类似本身是没有切换语言功能的,只是跟随系统的,那么你不可能在所有的activity里处理吧!所以我这里就直接在application中重新启动一次app就可以解决更新资源问题了

我们都知道在Application是Android的第一入口,那么一旦系统切换语言,就会触发它的onConfigurationChanged()方法,那么重新启动我们就直接在这个方法中处理,此处的finishActivity();方法是关闭掉所有的activity,那么在BaseActivity里就需要执行MyApp.getInstance().addActivity(this);

public class MyApp extends Application{
    private static MyApp instance = null;
    private List<Activity> activities =new ArrayList<Activity>();
    public void addActivity(Activity activity){
        activities.add(activity);
    }
    public void finishActivity() {
        for (Activity activity : activities) {
            activity.finish();
        }
    }
    public static MyApp getInstance() {
        if (instance == null) {
            instance = new MyApp();
        }
        return instance;
    }

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        instance = this;
    }
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub
        super.onConfigurationChanged(newConfig);
        //配置改变触发此方法
        finishActivity();//语言切换退出
        //最开始我是直接用的下面的方法,测试的时候发现如果app启动了多个activity的时候这个执行这个方法会导致app多重启几次,最后用批量关闭activity解决了
        //System.exit(0);
        //android.os.Process.killProcess(android.os.Process.myPid());
    }
}
时间: 2024-12-13 12:47:43

Android系统切换语言的时候APP无法更新资源文件的解决方法的相关文章

Android系统切换语言更新应用界面方法

最近做的一个升级应用,在下载升级包的过程中又有一个toast类型的dialog悬浮在屏幕右上角,这个时候切换系统语言会出现问题. 当主屏幕为升级应用时,切换系统语言升级应用重启,而重启后并不能自动断点续传切换前的下载进度:当主屏幕为launcher的时候,切换系统语言进度条上的提示语言并不能跟着切换: 解决这一问题主要分为以下几步: 1.设置系统切换语言不重启属性,在menifest的activity中设置 android:configChanges="locale|layoutDirectio

命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法

在学习NDK中,当我在项目的bin/classes目录下使用javah命令生成头文件时,出现了“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”这个问题,如下 跳转到项目的src目录下使用javah命令,而不是在项目的bin/classes目录下使用javah命令即可! 无法访问android.app.Activity是说明没有引入android.jar包可以看看java -h里面的具体说明.其中有一个-bootclasspath

关于Android项目中,突然就R类找不到已存在的资源文件的解决方法

项目代码早上打开正常,下午开的时候突然提示R类找不到已存在的布局文件,于是试了各种方法,CLEAN啊,重启啊,均无效,然后去网上搜了下,遇到这个问题的人还不少. 看到其中有这么一条解决方法,删除导入的Android.R包,去检查了自己的代码,果然有这么一行,删除之后,问题解决. 但是又比较奇怪这个Android.R是什么东西,得到的答复是,是系统的资源类,如果导入之后会与本地工程文件的R类冲突,所以产生错误,找不到布局文件等问题. 希望能对大家有所帮助.

〖Android〗Android App项目资源字符串检查(检查是否缺少对应的翻译,导致系统切换语言后崩溃)

Android项目开发过程中,容易出现缺少对应中英文翻译的情况,这个Python脚本是用于检查字符串是否缺少了对应的翻译 1 #!/usr/bin/env python 2 # encoding: utf-8 3 4 import os, sys, getopt 5 import xml.dom.minidom 6 import subprocess 7 from xml.dom.minidom import Node 8 9 # 判断是否是App项目依据 10 Axml='AndroidMan

Android系统默认语言改为中文

第一种方法: 修改 build/tools/buildinfo.sh echo "ro.product.locale.language=zh"echo "ro.product.locale.region=CN" 就可以修改Android系统默认语言为中文. 第二种方法: build/target/product/full_base.mk修改PRODUCT_LOCALES := zh_CN 就OK.

node app.js不起作用的解决方法

In Express 3.0, you normally would use app.configure() (or app.use() ) to set up the required middleware you need. Those middleware you specified are bundled together with Express 3.0. e.g. var express = require('express'); var routes = require('./ro

B150主板Win7系统出现蓝屏且提示错误代码0x000000C5的原因及解决方法

最近有用户反映,使用网吧内客户机出现蓝屏问题,且提示错误代码0x000000C5,检查发现客户机主板使用的是B150,这该怎么办呢?本文将提供Win7系统出现蓝屏且提示错误代码0x000000C5的原因及解决方法供大家了解,希望对大家有所帮助 近来有网吧用户反馈网吧内客户机出现C5蓝屏问题,客户机主板使用的是B150,那么如何解决呢?下面脚本之家的小编就带来了Win7系统出现0x000000C5蓝屏的解决方法,一起来看看吧. 原因说明 DNF等游戏程序会利用intel 虚拟化技术,如果没有开启i

Android Studio利用Gradle删除没有使用到的资源文件

我们在打包的时候默认会把没有用到的资源(比如图片)也打包成app,徒增了应用的大小.现在我们可以利用Gradle来优雅的去除没有用到的资源文件了! 就是在gradle中配置shrinkResources true.这个东西依赖于minifyEnabled,所以minifyEnabled也要为true才行. 官方推荐在正式版中这么写: android { buildTypes { release { minifyEnabled true shrinkResources true } } } 如果你

【我的Android进阶之旅】Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法

错误描述 今天使用第三方的so库时候,调用JNI方法时出现了错误.报错如下所示: 11-01 16:39:20.979 4669-4669/com.netease.xtc.cloudmusic E/art: No implementation found for void com.netease.xtc.cloudmusic.utils.NeteaseMusicUtils.nativeInit(android.content.Context) (tried Java_com_netease_xt