欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

详解Android更改APP语言模式的实现过程

程序员文章站 2024-03-06 08:10:19
一、效果图 二、描述 更改android项目中的语言,这个作用于只用于此app,不会作用于整个系统 三、解决方案 (一)布局文件 <...

一、效果图

详解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,并且把里面的中文改成英文,实现国际化.

详解Android更改APP语言模式的实现过程

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>

总结

以上就是详解android更改app语言模式的实现过程的全部内容,希望对大家开发android有所帮助,如果有疑问欢迎留言讨论。