1. 程式人生 > >Android 語言切換功能

Android 語言切換功能

最近專案要實現語言切換功能,大概實現了一下,先上效果圖:

這裡主要是通過點選語言切換彈出Popwindow進行語言選擇
英文狀態下
中文狀態下

記下來主要是為了以後方便檢視,下面來看下主要實現步驟。

先在res資原始檔下新建兩個資料夾,values-zh,values-en,然後資料夾下新建各建一個strings.xml檔案,如果要實現其他語言操作步驟一樣,專案裡只用到中文和英文,所以就實現了這兩種語言,實際檔案資源檢視:
AS下檢視結構
由於英語水平有限藉助了谷歌翻譯。。。

接下來就是主要程式碼:
1,Dialog主要程式碼

public class DialogLanguage {
    private Dialog mDialog;
    private int mLanguage;
private static DialogLanguage instance; public static DialogLanguage getInstance() { if (instance == null) { synchronized (CustomDialog.class) { if (null == instance) { instance = new DialogLanguage(); } } } return instance;
} public void ShowLanguageDialog(final Context context, int type, final LanguageListener callBack) { View view = LayoutInflater.from(context).inflate(R.layout.layout_language_select, null); RadioGroup rg = (RadioGroup) view.findViewById(R.id.radioGroup); final RadioButton ch = (RadioButton) view.findViewById
(R.id.radioButtonCh); final RadioButton en = (RadioButton) view.findViewById(R.id.radioButtonEn); switch (type) { case 1: ch.setChecked(true); en.setChecked(false); ch.setTextColor(context.getResources().getColor(R.color.colorThem)); en.setTextColor(context.getResources().getColor(R.color.textDark)); break; case 2: en.setChecked(true); ch.setChecked(false); ch.setTextColor(context.getResources().getColor(R.color.textDark)); en.setTextColor(context.getResources().getColor(R.color.colorThem)); break; default: break; } mLanguage = 1; rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.radioButtonCh: mLanguage = 1; ch.setTextColor(context.getResources().getColor(R.color.colorThem)); en.setTextColor(context.getResources().getColor(R.color.textDark)); break; case R.id.radioButtonEn: ch.setTextColor(context.getResources().getColor(R.color.textDark)); en.setTextColor(context.getResources().getColor(R.color.colorThem)); mLanguage = 2; break; } } }); View.OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_confirm: callBack.languageListener(mLanguage); mDialog.dismiss(); break; } } }; view.findViewById(R.id.tv_confirm).setOnClickListener(listener); mDialog = new Dialog(context, R.style.MyDialogStyle); mDialog.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { return true; } }); mDialog.setContentView(view); Window window = mDialog.getWindow(); WindowManager.LayoutParams p = window.getAttributes(); p.width = ScreenUtils.getScreenWidth(context) - DensityUtils.dp2px(context, 70f); window.setAttributes(p); mDialog.show(); } public interface LanguageListener { void languageListener(int number); } }

2,佈局xml檔案

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/dialog_bg"
    android:padding="@dimen/activity_margin_20"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="@dimen/activity_title_height"
        android:text="@string/language"
        android:gravity="center"
        android:textColor="@color/textMiddleDark"
        android:textSize="@dimen/activity_size_them"/>

    <RadioGroup
        android:id="@+id/radioGroup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <RadioButton
            android:id="@+id/radioButtonCh"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/CHINESE"
            android:textSize="@dimen/size_16"
            android:background="@null"
            android:layout_marginTop="@dimen/activity_margin_15"
            android:button="@null"
            android:textColor="@color/textDark"
            android:drawablePadding="0dp"
            android:gravity="center"/>

        <RadioButton
            android:id="@+id/radioButtonEn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/ENGLISH"
            android:layout_marginTop="@dimen/activity_margin_20"
            android:textSize="@dimen/size_16"
            android:background="@null"
            android:button="@null"
            android:textColor="@color/textDark"
            android:drawablePadding="0dp"
            android:gravity="center"/>
    </RadioGroup>

    <TextView
        android:id="@+id/tv_confirm"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/confirm"
        android:textColor="@color/colorThem"
        android:textSize="@dimen/activity_size_them"
        android:layout_marginTop="@dimen/activity_margin_25"/>

</LinearLayout>

3,呼叫Dialog部分

SharedPreferences sp = getSharedPreferences("language", MODE_PRIVATE);
                int type = sp.getInt("language", 0);
                DialogLanguage.getInstance().ShowLanguageDialog(this, type, new DialogLanguage.LanguageListener() {
                    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
                    @Override
                    public void languageListener(int num) {
                        //將選中項存入SharedPreferences,以便重啟應用後讀取設定
                        SharedPreferences preferences = getSharedPreferences("language", Context.MODE_PRIVATE);
                        SharedPreferences.Editor editor = preferences.edit();
                        editor.putInt("language", num);
                        editor.apply();
                       /* Intent intent = new Intent(Login.this, Login.class);
                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(intent);*/
                        Resources resources = getResources();
                        DisplayMetrics displayMetrics = resources.getDisplayMetrics();
                        Configuration configuration = resources.getConfiguration();
                        switch (num) {
                            case 1:
                                configuration.locale = Locale.SIMPLIFIED_CHINESE;
                                break;
                            case 2:
                                configuration.locale = Locale.ENGLISH;
                                break;
                            default:
                                break;
                        }

                        resources.updateConfiguration(configuration, displayMetrics);
                        Login.this.finish();
                        //重新在新的任務棧開啟新應用
                        App.getInstance().finishAllActivity();
                        Intent intent = new Intent(Login.this, Login.class);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                        startActivity(intent);
                        // android.os.Process.killProcess(android.os.Process.myPid());
                    }
                });

4,在啟動頁讀取已儲存的語言種類,然後進行設定

  private void setLanguage() {
        //讀取SharedPreferences資料,預設選中第一項
        SharedPreferences preferences = getSharedPreferences("language", Context.MODE_PRIVATE);
        int language = preferences.getInt("language", 1);

        //根據讀取到的資料,進行設定
        Resources resources = getResources();
        DisplayMetrics displayMetrics = resources.getDisplayMetrics();
        Configuration configuration = resources.getConfiguration();
        switch (language) {
            case 1:
                configuration.locale = Locale.SIMPLIFIED_CHINESE;
                break;
            case 2:
                configuration.locale = Locale.ENGLISH;
                break;
            default:
                break;
        }

        resources.updateConfiguration(configuration, displayMetrics);
        //setLanguage();

    }

至此已經完成了中英文語言切換功能。

相關推薦

Android 語言切換功能

最近專案要實現語言切換功能,大概實現了一下,先上效果圖: 記下來主要是為了以後方便檢視,下面來看下主要實現步驟。 先在res資原始檔下新建兩個資料夾,values-zh,values-en,然後資料夾下新建各建一個strings.xml檔案,如果

Android app應用多語言切換功能實現

最近在做一個多語言切換的功能,類似於微信的語言切換,搜了下資料基本上都是以下這種: 1. 實現的效果 和微信類似,在設定介面開啟切換語言的介面,選擇語言後重啟 HomeActivity,語言切換完成,下次重新開啟 App ,也是使用者設定的語言。 2. 實現步驟

Qt、QML動態語言切換功能的實現

        本例jic+介紹了qml混合程式設計的du執行多語言翻譯,工程目錄及執行效果如下圖: 一、生成資原始檔 1.在pro中ti新增需要多語言翻譯所需要的檔案,這樣編譯工程時會自動生成這兩個ts檔案。 TRANSLATIONS = language_zh_

Android 語言切換的方法,華為、小米手機語言切換語言後部分頁面會自動變為簡體中文

前言 最近做了一款軟體需要用到國際化(語言切換),同事負責這個模組,但是有bug,華為和小米手 機切換英文後,過一段時間部分模組會自動變回中文,他問我有沒有遇到這個問題,我研究了一下 最後發現了問題原因。 正文: 切換語言的方法: 1、首先要在AndroidManifest

前端Vue中多語言切換功能的實現

在基於vue-cli專案開發過程中,多語言切換功能可使用vue-i18外掛,具體實現方法如下:step1: 在專案中安裝vue-i18外掛cnpm install vue-i18n --save-devstep2:在專案的入口檔案main.js中引入vue-i18n外掛imp

關於網站做多語言切換功能的最簡單實現思路

PHP服務端: 在$_SERVER['HTTP_ACCEPT_LANGUAGE'] 中 [HTTP_ACCEPT_LANGUAGE] => zh-CN,en-US;q=0.8,zh;q=0.6,en;q=0.4 其中q是語言優先的權重,q值越大,權重越高,排在第一個的

ios 簡單的多國語言切換語言切換功能

App Store 中很多流行的應用程式有多種語言版本。雖然這些應用程式可能因為很多因素而變得流行,但是具有多種本地化版本,肯定是其中一個因素。越多的人可以理解並使用您的應用程式,潛在的買家也就越多。 若要讓您的應用程式擁有多個語言版本,必須先將它國際化,然後將它本地化。國

Yii2.0實現語言切換功能

... map ans sso 語言包 tex center ron ssa 在yii2.0高級模板框架中,以前臺為例,首先 在前臺frontend 下面建立 messages/zh-CN 在 messages文件夾中創建一個文件: ①common.php

Android中輸入密碼明文密文切換功能的實現

引言: 當我們在進行專案開發的過程中難免會進行登陸及註冊功能的實現,在這過程中難免會有密碼明文密文切換的需求,那麼現在我就給大家分享一下我自己封裝的一個方法,非常簡單,如果專案中有這樣的需求直接套

[Android]應用語言切換的三種方法

    Android對國際化與多語言切換已經做得不錯了,一個應用只要命名相應語系的values-[language]資料夾,通過“設定”→“語言&鍵盤”→“選擇語言”即可實現應用多種語言的切換。        但如何在應用裡自己實現?搜尋過發現網上有如下的做法:

Android 國際化之多語言切換

前言 android的國際化很簡單,大家都知道建立對應國家編碼的values資料夾就好啦。可是很多人不知道如何手動切換app的語言,而不是隻能跟隨系統語言變化,下面就介紹一下啦! 直接貼程式碼吧 /** * 設定當前語言 *

Android 聯絡人在中文,繁體,和English語言切換時,中文聯絡人排序顯示亂碼

alps/packages/providers/ContactsProvider/src/com/android/providers/contacts/LocaleSet.java --- a/alps/packages/providers/ContactsProvider

android:configuration 處理螢幕旋轉和語言切換等問題

當APP設定為螢幕可旋轉的時候,會發現在旋轉螢幕的過程中,使用者在EditText等控制元件中輸入的內容會隨之消失,這種情況同樣發生在切換系統語言的時候。 列印APP的生命週期,當進行螢幕方向轉換的時候,生命週期如圖: 螢幕方向的轉換,引起了Activi

Android 系統語言切換監聽和設定

最近專案上產品經理提了個需求,要求關閉語言國際化,不管手機系統設定那個國家的語言,都要顯示漢語,好吧,既然有需求,那就做吧。但是專案中已經有英文的配置了,且是作為預設String提供的,這麼多翻譯好的文字,直接刪除掉替換成中文為預設String又感覺棄之可惜。故網上Goog

Android自定義View實現圖片顯示,並實現縮放、拖拽、切換功能

這裡貼三個檔案的原始碼,第一個是main.java package com.example.test; import java.util.ArrayList; import java.util.List; import com.example.test.MyXZ; i

Android應用的多語言切換

在一些應用需要國際化或者面對各種使用者群體時,會涉及到語言的不同,所以我們在開發應用apk時,記得一定要養成將應用中涉及到的所有文字資訊放在string.xml裡的好習慣!Android中的多語言切換,對於我們應用層的開發同學來時,操作起來非常見到,程式碼也很簡

Android開發分享功能實現步驟

集成 sha har sse 分享 功能 秘鑰 步驟 過去 參考mob官網(http://www.mob.com/) 分享實現步驟:1.mob官網賬號註冊登錄2.進入後臺,進入ShareSDK,添加應用,生成秘鑰3.參照mob官網集成文檔,下載SDK,進入ShareSDK

ionic2 基於ngx-translate實現多語言切換,翻譯

click create -a fault template con 設置 切換 使用 介紹 ngx-translate 是Angular 2+的國際化(i18n)庫,在github的地址是箭頭 https://github.com/ngx-translate/core 將

語言切換jquery.i18n.min.js

jquery i18n 語言項目需求,切換多語言,采用jQuery.i18n.min.js文件內容如下-------------------------------------------------/*! * jquery i18n Plugin v1.0.0 * https://github.com/ZO

aNDROID圖片切換JaVa代碼

baidu oid http and ongl java java代碼 aid 代碼 COCOs2D-X%E6%B8%B8%E6%88%8F%E6%8A%80%E8%83%BDCD%E5%AE%9E%E7%8E%B0 http://music.baidu.com/song