Android中的Configuration

Configuration有哪些屬性

  • Manifest指:在Manifest文件中,activity標(biāo)簽的configChanges是否可以使用
  • Java指:android.content.res.Configuration類中是否存在對(duì)應(yīng)的屬性
    • 代表存在這個(gè)屬性臀蛛,N代表不存在這個(gè)屬性
屬性 Manifest Java 作用 版本信息
mcc - - SIM卡相關(guān) 1
mnc - - SIM卡相關(guān) 1
locale - - 修改地區(qū) 1
layoutdirection - N 隨著locale變化 17
touchscreen - - 一般不會(huì)發(fā)生 1
keyboard - - 鍵盤類型變化(外接鍵盤) 1
keyboardHidden - - 鍵盤是否顯示的狀態(tài)變化 1
navigation - - 導(dǎo)航按鈕的類型(滾動(dòng)球温鸽、方向鍵) 1
navigationHidden N - 導(dǎo)航按鈕是否顯示的狀態(tài)變化 1
screenLayout - - 屏幕的大小懊缺,長寬比窝稿,布局方向,曲面屏 1
fontScale - - 用戶修改字號(hào) 1
uiMode - - 車載模式占卧,底座模式甘苍,夜間模式 8
orientation - - 屏幕方向 1
screenSize - - 屏幕大小
screenWidthDp
screenHeightDp
13
smallestScreenSize - - 屏幕物理尺寸大小
smallestScreenWidthDp
13
densityDpi N - 屏幕密度 1

Configuration和Resouce的關(guān)系

從Resouce獲取資源時(shí)尝蠕,默認(rèn)使用當(dāng)前Configuration相匹配的資源。但也可以在運(yùn)行時(shí)载庭,更新Resouce關(guān)聯(lián)的Configuration看彼。

// android.content.res.Resources

    /**
     * Store the newly updated configuration.
     */
    public void updateConfiguration(Configuration config,
            DisplayMetrics metrics) {
        updateConfiguration(config, metrics, null);
    }

    /**
     * @hide
     */
    public void updateConfiguration(Configuration config,
            DisplayMetrics metrics, CompatibilityInfo compat) {
        synchronized (mAccessLock) {
            [....]
            mAssets.setConfiguration(mConfiguration.mcc, mConfiguration.mnc,
                    locale, mConfiguration.orientation,
                    mConfiguration.touchscreen,
                    mConfiguration.densityDpi, mConfiguration.keyboard,
                    keyboardHidden, mConfiguration.navigation, width, height,
                    mConfiguration.smallestScreenWidthDp,
                    mConfiguration.screenWidthDp, mConfiguration.screenHeightDp,
                    mConfiguration.screenLayout, mConfiguration.uiMode,
                    Build.VERSION.RESOURCES_SDK_INT);

            [....]
        }
        
        [....]
    }

從這部分代碼可以看到,所有資源文件夾的后綴中囚聚,除了v19之類的后綴是和Android系統(tǒng)版本相關(guān)靖榕,其他的都是和Configuration相關(guān)。

因此需要在代碼運(yùn)行時(shí)修改應(yīng)用的語言或屏幕密度顽铸,都可通過Resources#updateConfiguration來實(shí)現(xiàn)茁计。但一定要在更新配置之后,重新啟動(dòng)應(yīng)用谓松,從而確保所有頁面的資源都被重新獲取星压。

Configuration的修改怎么影響Activity的聲明周期

上節(jié)中通過更新Resouce關(guān)聯(lián)的Configuration控制顯示樣式的方案,并沒有真正修改系統(tǒng)的配置鬼譬。

當(dāng)系統(tǒng)的配置在真正被改變的時(shí)候租幕,為了確保Activity能使用正確的資源,系統(tǒng)默認(rèn)會(huì)銷毀Activity并自動(dòng)重新啟動(dòng)拧簸。銷毀前,系統(tǒng)會(huì)調(diào)用Activity#onSaveInstanceState男窟,重建時(shí)會(huì)在onCreate中傳入保存的狀態(tài)盆赤。

如果Activity希望自己處理某些設(shè)置的改變,則需要在Manifest中定義對(duì)應(yīng)的configChanges歉眷。這時(shí)Activity#onConfigurationChanged會(huì)被調(diào)用牺六。

由于目前大部分應(yīng)用的單個(gè)頁面的屏幕方向不會(huì)發(fā)生改變,所以很少需要實(shí)現(xiàn)Activity#onConfigurationChanged汗捡。

但為了避免橫屏頁面和豎屏頁面之間切換時(shí)淑际,Activity自動(dòng)重啟 畏纲,需要給activity配置android:configChanges="orientation|keyboardHidden|screenSize",其中screenSize是在SDK>=13時(shí)引入的春缕。

如果確實(shí)有頁面有橫豎兩種顯示模式盗胀,而且在橫豎屏?xí)r使用不同的資源。則需要在Activity#onConfigurationChanged中針對(duì)有差別的資源進(jìn)行更新锄贼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末票灰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宅荤,更是在濱河造成了極大的恐慌屑迂,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冯键,死亡現(xiàn)場離奇詭異惹盼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)惫确,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門手报,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雕薪,“玉大人,你說我怎么就攤上這事盏档◎谀叮” “怎么了前翎?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵道川,是天一觀的道長立宜。 經(jīng)常有香客問我橙数,道長灯帮,這世上最難降的妖魔是什么逻住? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任瞎访,我火速辦了婚禮装诡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己肄程,他們只是感情好玄叠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布代态。 她就那樣靜靜地躺著西雀,像睡著了一般叁温。 火紅的嫁衣襯著肌膚如雪膛檀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天花鹅,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛挺尾,可吹牛的內(nèi)容都是我干的崇众。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了舱卡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤舍杜,失蹤者是張志新(化名)和其女友劉穎既绩,沒想到半個(gè)月后饲握,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體救欧,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颜矿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泊柬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亮钦,死狀恐怖混卵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚁滋,我是刑警寧澤踏拜,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站襟齿,受9級(jí)特大地震影響猜欺,放射性物質(zhì)發(fā)生泄漏开皿。R本人自食惡果不足惜赋荆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一窄潭、第九天 我趴在偏房一處隱蔽的房頂上張望嫉你。 院中可真熱鬧幽污,春花似錦油挥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至般卑,卻和暖如春爽雄,著一層夾襖步出監(jiān)牢的瞬間挚瘟,已是汗流浹背乘盖。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工析苫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衩侥,地道東北人纵揍。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓璧榄,卻偏偏與公主長得像骨杂,于是被迫代替她去往敵國和親搓蚪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丁鹉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容