最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android?實(shí)現(xiàn)APP可切換多語(yǔ)言步驟詳解

 更新時(shí)間:2023年11月29日 08:55:00   作者:Stars-one  
如果是單獨(dú)給app加上國(guó)際化,其實(shí)很容易,創(chuàng)建對(duì)應(yīng)的國(guó)家資源文件夾即可,如values-en,values-pt,這篇文章主要介紹了Android?實(shí)現(xiàn)APP可切換多語(yǔ)言,需要的朋友可以參考下

如果是單獨(dú)給app加上國(guó)際化,其實(shí)很容易,創(chuàng)建對(duì)應(yīng)的國(guó)家資源文件夾即可,如values-en,values-pt,app會(huì)根據(jù)當(dāng)前系統(tǒng)語(yǔ)言去使用對(duì)應(yīng)語(yǔ)言資源文件,如果找不到,則使用values文件夾里的資源

但本文講得是另外一種情況,就是app內(nèi)置一個(gè)切換多語(yǔ)言的頁(yè)面,可以給用戶切換

步驟

1.添加服務(wù)聲明

此步驟主要是讓我們的app可記錄當(dāng)前應(yīng)用語(yǔ)言,使用的Service是android系統(tǒng)給我們提供的

<!--    國(guó)際化多語(yǔ)言    -->
<service
	android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
	android:enabled="false"
	android:exported="false">
	<meta-data
		android:name="autoStoreLocales"
		android:value="true" />
</service>

2.在xml文件夾增加文件locale_config.xml

聲明支持的幾個(gè)語(yǔ)言

<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
    <locale android:name="en" />
    <locale android:name="pt" />
    <locale android:name="es" />
    <locale android:name="de" />
    <locale android:name="fr" />
</locale-config>

3.調(diào)用方法切換多語(yǔ)言

// 切換語(yǔ)言
val langua="en"
AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(langua))

補(bǔ)充下其他方法:

//獲取當(dāng)前應(yīng)用使用語(yǔ)言
val locale = AppCompatDelegate.getApplicationLocales()[0]
//語(yǔ)言短標(biāo)轉(zhuǎn)為locale對(duì)象
val langua="en"
val locale = Locale.forLanguageTag(langua)

一些坑點(diǎn)

1.上架谷歌市場(chǎng)無(wú)法切換語(yǔ)言

上架到谷歌市場(chǎng),用戶下載只會(huì)下載其系統(tǒng)語(yǔ)言包,會(huì)導(dǎo)致app內(nèi)置的語(yǔ)言切換功能無(wú)效

原因是打包為aab的時(shí)候,gradle的配置,默認(rèn)是開啟了語(yǔ)言分包設(shè)置,我們?nèi)∠@個(gè)設(shè)置就可以解決此問題

gradle配置如下

buildTypes {
	release {
			
		bundle{
			//設(shè)置多語(yǔ)言不分包處理
			language {
				// Specifies that the app bundle should not support
				// configuration APKs for language resources. These
				// resources are instead packaged with each base and
				// feature APK.
				enableSplit = false
			}
			density {
				// This property is set to true by default.
				enableSplit = true
			}
			abi {
				// This property is set to true by default.
				enableSplit = true
			}

		}
	}
}

2.使用StringUtil導(dǎo)致語(yǔ)言切換功能失效

我使用到了Blankj/AndroidUtilCode里面的StringUtil獲取數(shù)據(jù),到時(shí)切換多語(yǔ)言后會(huì)存在問題

原因是里面StringUtil里面使用的是application而不是Activity

最終還是更換為使用Activity對(duì)象來(lái)獲取string文本(activity.getString(R.string.hello))

也看到了issue有人說(shuō)到這個(gè)問題,說(shuō)要是更新application的資源文件,但我測(cè)試的時(shí)候發(fā)現(xiàn)更新application的語(yǔ)言資源后,會(huì)觸發(fā)應(yīng)用閃屏的效果,然后就沒有使用此方法

由于項(xiàng)目進(jìn)度趕,就沒去細(xì)究了

3.使用靜態(tài)數(shù)據(jù)導(dǎo)致后續(xù)沒有文本沒有更新

因?yàn)轫?yè)面有幾個(gè)使用相同布局的樣式,比如說(shuō)常見的菜單項(xiàng),我是這樣的做法:

抽取出來(lái)的一個(gè)靜態(tài)類來(lái)存儲(chǔ)對(duì)應(yīng)數(shù)據(jù)(圖標(biāo),文本之類),之后寫一個(gè)xml文件,頁(yè)面則是使用include來(lái)引用多份相同樣式的item,最終在Activity里給這些item賦值

由于item比較少,又不想用recyclerview,就是采用了上面的這個(gè)方法

但是如果涉及到多語(yǔ)言切換的話,就會(huì)導(dǎo)致沒有數(shù)據(jù)及時(shí)更新

原因是更換語(yǔ)言后,是Activity進(jìn)行的重新創(chuàng)建,但我們存儲(chǔ)數(shù)據(jù)的類還是存在的,里面文本數(shù)據(jù)并沒有更新,所以就是導(dǎo)致了這個(gè)問題

解決方法簡(jiǎn)單粗暴,就每次Activity的onCreate方法里創(chuàng)建對(duì)應(yīng)的數(shù)據(jù)對(duì)象即可,這樣,Activity重建之后我們的文本數(shù)據(jù)就會(huì)重新調(diào)用activity.getString(R.string.hello)獲取了

到此這篇關(guān)于Android 實(shí)現(xiàn)APP可切換多語(yǔ)言的文章就介紹到這了,更多相關(guān)Android 切換多語(yǔ)言內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android如何防止apk程序被反編譯(尊重勞動(dòng)成果)

    Android如何防止apk程序被反編譯(尊重勞動(dòng)成果)

    作為Android應(yīng)用開發(fā)者,不得不面對(duì)一個(gè)尷尬的局面,就是自己辛辛苦苦開發(fā)的應(yīng)用可以被別人很輕易的就反編譯出來(lái),天下痛苦之事莫過于此啊,本文會(huì)介紹一種防止apk程序被反編譯的方法,感興趣的朋友可以了解下哦
    2013-01-01
  • 使用Android實(shí)現(xiàn)實(shí)時(shí)視頻通話(附源碼)

    使用Android實(shí)現(xiàn)實(shí)時(shí)視頻通話(附源碼)

    在移動(dòng)互聯(lián)網(wǎng)時(shí)代,實(shí)時(shí)視頻通話已成為社交,協(xié)作,教育,醫(yī)療等多種場(chǎng)景的標(biāo)配功能,本項(xiàng)目將從零搭建一個(gè)基于?WebRTC?的?Android?視頻通話程序,希望對(duì)大家有一定的幫助
    2025-04-04
  • android實(shí)現(xiàn)自動(dòng)滾動(dòng)的Gallary控件效果

    android實(shí)現(xiàn)自動(dòng)滾動(dòng)的Gallary控件效果

    這篇文章主要介紹了android實(shí)現(xiàn)自動(dòng)滾動(dòng)的Gallary控件效果,涉及Android中Gallary控件的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Android實(shí)用圖文教程之代碼混淆、第三方平臺(tái)加固加密、渠道分發(fā)

    Android實(shí)用圖文教程之代碼混淆、第三方平臺(tái)加固加密、渠道分發(fā)

    這篇文章主要介紹了Android實(shí)用圖文教程之代碼混淆、第三方平臺(tái)加固加密、渠道分發(fā),需要的朋友可以參考下
    2014-12-12
  • Android仿微信圖片選擇器ImageSelector使用詳解

    Android仿微信圖片選擇器ImageSelector使用詳解

    這篇文章主要為大家詳細(xì)介紹了Android仿微信圖片選擇器ImageSelector的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android生成帶圓角的Bitmap圖片

    Android生成帶圓角的Bitmap圖片

    這篇文章主要介紹了Android生成帶圓角的Bitmap圖片,涉及Android通過Canvas實(shí)現(xiàn)繪制帶圓角的圖片相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Android開機(jī)自啟動(dòng)程序詳解

    Android開機(jī)自啟動(dòng)程序詳解

    本篇文章是對(duì)Android開機(jī)自啟動(dòng)程序進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Android開發(fā)之天氣趨勢(shì)折線圖

    Android開發(fā)之天氣趨勢(shì)折線圖

    在開發(fā)天氣APP的時(shí)候會(huì)要顯示多天的信息,所以加一個(gè)折線圖來(lái)顯示一下天氣變化趨勢(shì)是很不錯(cuò)的效果,本文詳細(xì)介紹了開發(fā)過程,下面一起來(lái)看看。
    2016-08-08
  • Android開發(fā)自學(xué)筆記(五):使用代碼控制界面

    Android開發(fā)自學(xué)筆記(五):使用代碼控制界面

    這篇文章主要介紹了Android開發(fā)自學(xué)筆記(五):使用代碼控制界面,本文講解了添加第二個(gè)layout、添加MyActivity的code、setup函數(shù)、getResult函數(shù)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Android shape標(biāo)簽使用方法介紹

    Android shape標(biāo)簽使用方法介紹

    shape算是我們常用的一個(gè)標(biāo)簽,他可以生成線條,矩形, 圓形, 圓環(huán),像我們圓角的按鈕就可以通過shape來(lái)實(shí)現(xiàn),最終Android會(huì)把這個(gè)帶有shape標(biāo)簽的圖片解析成一個(gè)Drawable對(duì)象,這個(gè)Drawable對(duì)象本質(zhì)是GradientDrawable
    2022-09-09

最新評(píng)論

库尔勒市| 夏津县| 合作市| 宁武县| 密山市| 界首市| 大连市| 遵义市| 潜山县| 兴和县| 芦山县| 南开区| 平和县| 贡嘎县| 霍邱县| 通许县| 兴业县| 凯里市| 和顺县| 漳浦县| 汶上县| 崇明县| 大英县| 江安县| 汶川县| 高陵县| 报价| 梅河口市| 古浪县| 朝阳区| 龙陵县| 盱眙县| 临泽县| 湘潭市| 吴忠市| 盈江县| 抚州市| 黎川县| 东兰县| 汤原县| 特克斯县|