详解Android更改APP语言模式的实现过程
作者:daisy 发布时间:2023-05-18 16:56:35
标签:Android,app,多语言
一、效果图
二、描述
更改Android项目中的语言,这个作用于只用于此APP,不会作用于整个系统
三、解决方案
(一)布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hellow" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="changeLanguage"
android:text="语言切换" />
</LinearLayout>
(二)MainActivity主页面
package com.example.chinesepage;
import java.util.Locale;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* 点击按钮,更换语言
*
* @param view
*/
public void changeLanguage(View view) {
Resources resources = getResources();
Configuration configuration = resources.getConfiguration(); // 获取资源配置
if (configuration.locale.equals(Locale.CHINA)) { // 判断当前语言是否是中文
configuration.locale = Locale.ENGLISH; // 设置当前语言配置为英文
} else {
configuration.locale = Locale.CHINA; // 设置当前语言配置为中文
}
DisplayMetrics metrics = new DisplayMetrics();
resources.updateConfiguration(configuration, metrics); // 更新配置文件
sendBroadcast(new Intent("language")); // 发送广播,广播接受后重新开启此Activtiy以重新初始化界面语言.
// Intent intent = new Intent(MainActivity.this, MainActivity.class); //或者可以直接跳转MainActivity
// intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); //去除掉跳转的动画,让用户看起来好像没有跳转的感觉
// startActivity(intent);
finish();
}
}
(三)ChangeReceiver广播类
package com.example.chinesepage;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
/**
* 自定义广播类 语言改变后重启Activity
*
* @author asus
*
*/
public class ChangeReceiver extends BroadcastReceiver {
private Intent mIntent;
@Override
public void onReceive(Context context, Intent intent) {
mIntent = new Intent(context, MainActivity.class);
mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(mIntent);
}
}
(四)在Res下创建Values-en文件夹,复制String.xml,并且把里面的中文改成英文,实现国际化.
values/strings.xml
<resources>
<string name="app_name">语言切换</string>
<string name="hello_world">你好,World!</string>
<string name="action_settings">设置</string>
<string name="hellow">你好</string>
</resources>
values-en/strings.xml
<resources>
<string name="app_name">ChinesePage</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="hellow">Hellow</string>
</resources>
(五)注册广播(这个别忘了~)
<receiver android:name="com.example.chinesepage.ChangeReceiver" >
<intent-filter>
<action android:name="language" />
</intent-filter>
</receiver>
总结


猜你喜欢
- 为了解决用一个命令(宏)给方法,类,js方法添加注释,经过几天的研究.终于得到结果了。实现的效果如下:给Java中的method添加方法:/
- 本文实例讲述了Java编程实现非对称加密的方法。分享给大家供大家参考,具体如下:对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算
- 前言对于联表查询的四个注解 @OneToOne、@OneToMany、@ManyToOne 和 @ManyToMany,他们有几个用得比较多
- 一、volatile关键字介绍及底层原理1.volatile的特性(内存语义)当一个变量被定义成volatile之后,它将具备两项特性:第一
- springboot配置文件中属性变量引用@@这种属性应用方式是field_name=@field_value@。两个@符号是springb
- Java8对集合提供了一种流式计算的方式,这种风格将要处理的元素集合看 作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如
- File类简介package com.file;import java.io.File;import java.io.IOException
- Android ActionBarActivity设置全屏无标题的方法总结新建的Activity继承自ActionBarActivity,设
- 添加POM依赖:<!-- spring-boot-监控--><dependency> <group
- RecyclerView 已经出来很久了,但是在项目中之前都使用的是ListView,最近新的项目上了都大量的使用了RecycleView.
- Android设备多分辨率的问题 Android浏览器默认预览模式浏览 会缩小页面 WebView中则会以原始大小显示 Android浏览器
- 相信大家在小的时候都玩过拼图游戏,现如今,手机普及,能在手机上玩的游戏越来越多,于是乎,重温小时候,编写这个简易拼图游戏,而且也能进一步加深
- mongodb的数据插入速度是其一个亮点,同样的10000条数据,插入的速度要比Mysql和sqlserver都要快,当然这也是要看使用者怎
- Spring-boot JMS 发送消息慢的问题解决1、在《ActiveMQ 基于zookeeper的主从(levelDB Master/S
- 前言建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一
- Springboot 实体类生成数据库表JPA:springboot -jpa:数据库的一系列的定义数据持久化的标准的体系学习的目的是:利用
- 如何解决Mybatis--java.lang.IllegalArgumentException: Result Maps collection already contains value for X这两天因为项目需要整合spring、struts2、mybatis三大框架,但启动的时候总出现这个错误,困扰我好久,在网上找到的答案都不是我
- 这几年都在搞前后端分离、RESTful风格,我们项目中也在这样用。前几天有人遇到了解析JSON格式的请求数据的问题,然后说了一下解析的方式,
- 一.认识IO1.IO的分类(1)BIO:同步阻塞IO(2)NIO:同步非阻塞IO(3)AIO:异步阻塞IO注意: 这里主要介绍BIO2.IO
- 引言:在使用循环的时候,循环里面带有break、continue、return的时候经常弄混,今天特意整理了下,以待后用... f