• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > App内切换语言,app切换语言

App内切换语言,app切换语言

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了app切换语言,nest app怎么改语言,有什么学语言的app,开发app用什么语言,app store语言设置等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

App内切换语言,app切换语言


转载请注明出处 http://www.cnblogs.com/cnwutianhao/p/6746981.html 

 

前几天客户提需求,对App增加一个功能,这个功能目前市面上已经很常见,那就是应用内切换语言。啥意思,就是 英、中、法、德、日。。。语言随意切换。

(本案例采用Data-Bingding模式,麻麻再也不用担心我findViewBy不到Id了哈哈,开个玩笑)

先上示例图:

 

代码实现:

布局文件(Data-Binding模式),很简单就是两行文字

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <RelativeLayout xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.tnnowu.android.switchlanguage.MainActivity">

        <TextView
            android:id="@+id/titleTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="@string/title"
            android:textSize="30sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/descTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/titleTextView"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="10dp"
            android:text="@string/desc"
            android:textSize="20sp" />

    </RelativeLayout>

</layout>

 

从实例中我们可以看到右上角是有Menu

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">

    <item
        android:id="@+id/language_english"
        android:orderInCategory="100"
        android:title="@string/menu_english" />
    <item
        android:id="@+id/language_simplified_chinese"
        android:orderInCategory="100"
        android:title="@string/menu_simplified_chinese" />
    <item
        android:id="@+id/language_turkish"
        android:orderInCategory="100"
        android:title="@string/menu_turkish" />
    <item
        android:id="@+id/language_japanese"
        android:orderInCategory="100"
        android:title="@string/menu_japanese" />

</menu>

(既然是多语言,所以就要有N个strings)

,本案例我创建了4种语言。

 

好的,Menu的布局写完了,接下来就是实现Menu功能,记住实现Menu就两套代码,一个 onCreateOptionsMenu , 另一个是 onOptionsItemSelected 。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.language_english) {
        updateViews("en");
    } else if (id == R.id.language_simplified_chinese) {
        updateViews("zh");
    } else if (id == R.id.language_turkish) {
        updateViews("tr");
    } else if (id == R.id.language_japanese) {
        updateViews("ja");
    }
    return super.onOptionsItemSelected(item);
}

 

在这里,可以看到,我们自定义一个 updateViews() 方法,用来实现切换预言时界面的改变

private void updateViews(String languageCode) {
    Context context = LocaleHelper.setLocale(this, languageCode);
    Resources resources = context.getResources();

    mBinding.titleTextView.setText(resources.getString(R.string.title));
    mBinding.descTextView.setText(resources.getString(R.string.desc));

    setTitle(resources.getString(R.string.toolbar_title));
}

 

公布一个 语言判断的类 LocaleHelper

public class LocaleHelper {

    private static final String SELECTED_LANGUAGE = "Locale.Helper.Selected.Language";

    public static Context onAttach(Context context) {
        String lang = getPersistedData(context, Locale.getDefault().getLanguage());
        return setLocale(context, lang);
    }

    public static Context onAttach(Context context, String defaultLanguage) {
        String lang = getPersistedData(context, defaultLanguage);
        return setLocale(context, lang);
    }

    public static String getLanguage(Context context) {
        return getPersistedData(context, Locale.getDefault().getLanguage());
    }

    public static Context setLocale(Context context, String language) {
        persist(context, language);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            return updateResources(context, language);
        }

        return updateResourcesLegacy(context, language);
    }

    private static String getPersistedData(Context context, String defaultLanguage) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        return preferences.getString(SELECTED_LANGUAGE, defaultLanguage);
    }

    private static void persist(Context context, String language) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        SharedPr



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • App内切换语言,app切换语言

相关文章

  • 2017-05-26Hello,Android
  • 2017-05-26活动的生命周期系列(一)返回栈,生命周期系列
  • 2017-05-26android视图学习---从源码角度来理解onMeasure过程
  • 2017-05-26android:Activity数据传递之对象(parcelable)
  • 2017-05-26Linux内核系列—7.操作系统开发之中断和异常,linux内核
  • 2017-05-26android源码解析之(三)--)HandlerThread
  • 2017-05-26redis使用内存调整及优化
  • 2017-05-26Android中Fragment的两种创建方式,androidfragment
  • 2017-05-26Android之使用Bundle进行IPC,androidbundleipc
  • 2017-05-226.3.1 数据存储与访问之——初见SQLite数据库

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • android常用框架收录,android收录
    • Android开发简单服务器
    • android去掉滑动到顶部和底部的阴影,android到顶部
    • Android基础部分再学习---activity的生命周期
    • android:Activity启动模式之singleTask(二)
    • 8.3.2 绘图类实战示例
    • 一个简单的Makefile编译框架
    • 回收ImageView占用的图像内存,imageview占用图像
    • Android 动画资源 详解
    • Android开发学习—— 创建项目时,不是继承activity,而是继承ActionBarActivity,androidactivity继承

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有