因为公司的产品大部分是销售到国外的,所以领导要求app有语言切换功能。我在网上搜了些相关知识并实现了功能,在这里做个中英文切换的demo记录下来。
先看看demo的效果:
效果就是这样子。当然也可以做成其他语言的切换,具体根据需求而定。
原理其实很简单,就是多个strings.xml进行切换然后在刷新Activity。
首先,在AndroidManifest.xml文件中的每个需要切换语言的Activity中加入android:configChanges="locale"。
然后在res文件夹下添加对应语种的values文件:
比如中文简体就是values-zh-rCN、英文就是values-en。
当然还有其他语种的,这里我只做了两个常用的有需要的可以去查看各国语言缩写、各国语言简称。其原理都是一样的。
values-zh-rCN/strings.xml:
<resources>
<string name="app_name">LanguageDemo</string>
<string name="chinese">中文</string>
<string name="english">英文</string>
<string name="red">红色</string>
<string name="orange">×××</string>
<string name="blue">蓝色</string>
<string name="green">绿色</string>
<string name="purple">紫色</string>
</resources>
values-en/strings.xml:
<resources>
<string name="app_name">LanguageDemo</string>
<string name="chinese">Chinese</string>
<string name="english">English</string>
<string name="red">Red</string>
<string name="orange">Orange</string>
<string name="blue">Blue</string>
<string name="green">Green</string>
<string name="purple">Purple</string>
</resources>
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.lg.languagedemo.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="Chinese"
android:text="@string/chinese" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:onClick="English"
android:text="@string/english" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_centerInParent="true"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/red"
android:textColor="@android:color/holo_red_dark"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/orange"
android:textColor="@android:color/holo_orange_dark"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/blue"
android:textColor="@android:color/holo_blue_dark"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/green"
android:textColor="@android:color/holo_green_dark"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/purple"
android:textColor="@android:color/holo_purple"
android:textSize="16sp" />
</LinearLayout>
</RelativeLayout>
最后是切换语言的核心代码:
private Configuration configuration;
private DisplayMetrics displayMetrics;
private Resources resources;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resources = getResources();// 获得res资源对象
configuration = resources.getConfiguration();// 获得设置对象
displayMetrics = resources.getDisplayMetrics();
}
//中文
public void Chinese(View view) {
configuration.locale = Locale.SIMPLIFIED_CHINESE;
resources.updateConfiguration(configuration, displayMetrics);
startActivity(new Intent(MainActivity.this,MainActivity.class));
finish();
}
//英文
public void English(View view) {
configuration.locale = Locale.US;
resources.updateConfiguration(configuration, displayMetrics);
startActivity(new Intent(MainActivity.this,MainActivity.class));
finish();
}
当然刷新页面也不止这一种方法可以用onCreate(),不过这个方法限制比较多。还有recreate(),使用这个方法屏幕会闪一下。
那么源码地址:http://down.51cto.com/data/2229088
如果你喜欢我的文章就关注我的博客吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。