日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android切换泰语,Android应用内切换语言

發(fā)布時(shí)間:2023/12/4 Android 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android切换泰语,Android应用内切换语言 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先扯點(diǎn)別的:這是第一次在簡(jiǎn)書(shū)上寫(xiě)東西,我突然明白為啥這么多人在簡(jiǎn)書(shū)上寫(xiě)東西了,因?yàn)闆](méi)有廣告啊,哈哈。

最近接觸到Android 應(yīng)用內(nèi)切換語(yǔ)言的問(wèn)題,研究了兩天,做個(gè)記錄先。實(shí)現(xiàn)了中文,英文,泰語(yǔ)的切換。測(cè)試機(jī)器 Nexus5(Android p),HUAWEI榮耀9青春版(8.0.0),XIAOMI mi 4LTE(6.0.1)。看下效果

language.gif

完整的例子在底部

實(shí)現(xiàn)步驟

首先需要新建對(duì)應(yīng)語(yǔ)言環(huán)境下的資源文件

微信截圖_20180605205842.png

對(duì)于Android7.0及以上版本

定義一個(gè)BaseActivity,重寫(xiě)attachBaseContext方法,在此方法里進(jìn)行語(yǔ)言切換

public class BaseActivity extends AppCompatActivity {

/**

* 此方法先于 onCreate()方法執(zhí)行

* @param newBase

*/

@Override

protected void attachBaseContext(Context newBase) {

//獲取我們存儲(chǔ)的語(yǔ)言環(huán)境 比如 "en","zh",等等

String language = SpUtil.getInstance(App.getContext()).getString(SpUtil.LANGUAGE);

//attach 對(duì)應(yīng)語(yǔ)言環(huán)境下的context

super.attachBaseContext(LanguageUtil.attachBaseContext(newBase, language));

}

}

LanguageUtil中的attachBaseContext()方法

public static Context attachBaseContext(Context context, String language) {

Log.d(TAG, "attachBaseContext: "+Build.VERSION.SDK_INT);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

return updateResources(context, language);

} else {

return context;

}

}

@TargetApi(Build.VERSION_CODES.N)

private static Context updateResources(Context context, String language) {

Resources resources = context.getResources();

Locale locale = LanguageUtil.getLocaleByLanguage(language);

Configuration configuration = resources.getConfiguration();

configuration.setLocale(locale);

configuration.setLocales(new LocaleList(locale));

return context.createConfigurationContext(configuration);

}

在attachBaseContext()方法中,我們判斷一下,如果當(dāng)前api大于24,那么就調(diào)用updateResources()方法更新context。

定義好BaseActivity以后,我們只需要讓我們的Activity都繼承這個(gè)基類(lèi)即可。

對(duì)于Android7.0及以下版本

自定義Application并在AndroidManifest.xml文件中聲明,在Application的onCreate()方法中,調(diào)用更換語(yǔ)言的方法即可。

public class App extends Application {

private static Context context;

private final String TAG = getClass().getSimpleName();

@Override

public void onCreate() {

super.onCreate();

context = this;

/**

* 對(duì)于7.0以下,需要在Application創(chuàng)建的時(shí)候進(jìn)行語(yǔ)言切換

*/

String language = SpUtil.getInstance(this).getString(SpUtil.LANGUAGE);

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {

LanguageUtil.changeAppLanguage(App.getContext(), language);

}

}

public static Context getContext() {

return context;

}

}

微信截圖_20180605211204.png

LanguageUtil中的changeAppLanguage方法

/**

* @param context

* @param newLanguage 想要切換的語(yǔ)言類(lèi)型 比如 "en" ,"zh"

*/

@SuppressWarnings("deprecation")

public static void changeAppLanguage(Context context, String newLanguage) {

if (TextUtils.isEmpty(newLanguage)) {

return;

}

Resources resources = context.getResources();

Configuration configuration = resources.getConfiguration();

//獲取想要切換的語(yǔ)言類(lèi)型

Locale locale = getLocaleByLanguage(newLanguage);

configuration.setLocale(locale);

// updateConfiguration

DisplayMetrics dm = resources.getDisplayMetrics();

resources.updateConfiguration(configuration, dm);

}

經(jīng)過(guò)上面的操作就可以在7.0以下實(shí)現(xiàn)應(yīng)用內(nèi)切換語(yǔ)言。

手動(dòng)切換語(yǔ)言

定義一個(gè)ChangeLanguageActivity

public void onClick(View view) {

String language = null;

switch (view.getId()) {

case R.id.btn_chinese:

//切換為簡(jiǎn)體中文

language = LanguageType.CHINESE.getLanguage();

break;

case R.id.btn_english:

//切換為英語(yǔ)

language = LanguageType.ENGLISH.getLanguage();

break;

case R.id.btn_thailand:

//切換為泰語(yǔ)

language = LanguageType.THAILAND.getLanguage();

break;

default:

break;

}

changeLanguage(language);

}

/**

* 如果是7.0以下,我們需要調(diào)用changeAppLanguage方法,

* 如果是7.0及以上系統(tǒng),直接把我們想要切換的語(yǔ)言類(lèi)型保存在SharedPreferences中,然后重新啟動(dòng)MainActivity即可

* @param language

*/

private void changeLanguage(String language) {

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {

LanguageUtil.changeAppLanguage(App.getContext(), language);

}

SpUtil.getInstance(this).putString(SpUtil.LANGUAGE, language);

Intent intent = new Intent(this, MainActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

finish();

}

如果是7.0以下,我們需要調(diào)用changeAppLanguage方法, 如果是7.0及以上系統(tǒng),直接把我們想要切換的語(yǔ)言類(lèi)型保存在SharedPreferences中,然后重新啟動(dòng)MainActivity即可。

如果控件尺寸固定,當(dāng)切換語(yǔ)言的時(shí)候,文字長(zhǎng)短發(fā)生變化如何解決?

可以使用google提供的新特性來(lái)解決。

總結(jié)

以上是生活随笔為你收集整理的Android切换泰语,Android应用内切换语言的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。