[Android][Theme對(duì)Activity的影響]

1.落筆緣由

研究Theme對(duì)Activity的影響帐我。

1)對(duì)Activity里的dialog樣式有影響括饶,不同的Activity主題會(huì)對(duì)dialog有不同的影響冯乘,例如入录,Theme.Black.NoTitleBar.Fullscreen會(huì)讓dialog標(biāo)題和里面控件的寬度和高度造成影響蛤奥,標(biāo)題顯示不完整,控件設(shè)置的寬高和實(shí)際不符等僚稿。

當(dāng)我把Activity的主題設(shè)置為T(mén)heme.Black.NoTitleBar.Fullscreen的時(shí)候凡桥,

這個(gè)activity里有一個(gè)自定義的Dialog

public class OutlineDialog extends Dialog  {

    public OutlineDialog(Context context) {
        super(context);
    }

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

        final ListView listView = new ListView(getContext());
        listView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);

        setContentView(R.layout.dialog_body_layout);

        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.pdf_list_title);

        final Button btn_outline_close = (Button) findViewById(R.id.title_btn_close);
        btn_outline_close.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(final View v) {
                dismiss();
            }
        });
        
        final TextView tv_outline_title = (TextView) findViewById(R.id.list_title);
        tv_outline_title.setText("目錄");
    }
}

它的顯示效果如下:


image.png

如上面的代碼,本來(lái)是想直接定義Dialog的標(biāo)題欄的蚀同,所以我做了如下的動(dòng)作


image.png

但當(dāng)把Activity主題設(shè)置為T(mén)heme.Holo.Light.NoActionBar.Fullscreen的時(shí)候缅刽,效果是比較正常的,


image.png

丑爆了蠢络,那么我不定義標(biāo)題欄了效果會(huì)是怎么樣的呢衰猛,

public class OutlineDialog2 extends Dialog  {

    public OutlineDialog2(Context context) {
        super(context);
    }
    
    /**
     * @param context
     * @param theme
     */
    public OutlineDialog2(Context context, int theme)
    {
        super(context, theme);
    }

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle("123");
        setContentView(R.layout.dialog_body_layout);
    }
}

效果如下圖,一樣丑


image.png

總結(jié)一下刹孔,如果要通過(guò)最上面的這種方式來(lái)定義標(biāo)題啡省,那么Activity最好不要用Theme.Black.NoTitleBar.Fullscreen這個(gè)主題,


image.png

不過(guò)也可以直接設(shè)置dialog的標(biāo)題隱藏,然后在dialog的body里直接定義標(biāo)題的樣子髓霞。

2)對(duì)Activity的退出動(dòng)畫(huà)有無(wú)影響卦睹。當(dāng)把ActivityThree放在另一個(gè)進(jìn)程里跑的時(shí)候android:process="com.lgy.testTheme", 不會(huì)影響Activity的啟動(dòng)動(dòng)畫(huà)和退出動(dòng)畫(huà)方库。但是如果在退出Activity的時(shí)候同時(shí)調(diào)用android.os.Process.killProcess(android.os.Process.myPid());结序,那么就不會(huì)再指向退出動(dòng)畫(huà),畢竟Activity所在的進(jìn)程都被殺死了纵潦,當(dāng)然不會(huì)再執(zhí)行退出動(dòng)畫(huà)徐鹤。 所以windowIsTranslucent設(shè)置為true并不會(huì)影響Activity的退出和啟動(dòng)動(dòng)畫(huà)。

3)對(duì)Activity的popupWindow進(jìn)入的動(dòng)畫(huà)有影響邀层。當(dāng)讓Activity在另一個(gè)進(jìn)程跑的時(shí)候android:process="com.lgy.testTheme2"返敬,會(huì)出現(xiàn)下面的情況,當(dāng)windowDisablePreview設(shè)置為true且windowIsTranslucent設(shè)置為false的時(shí)候,popupWindow的進(jìn)入動(dòng)畫(huà)會(huì)失效被济。當(dāng)然救赐,如果windowIsTranslucent默認(rèn)情況下是false.

但如果沒(méi)有設(shè)置android:process="com.lgy.testTheme2",對(duì)popupWindow進(jìn)入的動(dòng)畫(huà)是沒(méi)有影響的


image.png

4)當(dāng)主題里設(shè)置了windowIsTranslucent為true的時(shí)候,也就是背景設(shè)置為透明经磅,<item name="android:windowIsTranslucent">true</item>泌绣,Activity的生命周期會(huì)受到影響。windowIsTranslucent設(shè)置為true之后预厌,會(huì)破壞生命周期阿迈。當(dāng)Activity A啟動(dòng)Activity B, A不透明轧叽,B透明苗沧,那么 A的onStop不會(huì)被調(diào)用,只會(huì)調(diào)用onPause炭晒。相當(dāng)于啟動(dòng)了一個(gè)dialog待逞。

2.總結(jié)

其實(shí)引發(fā)問(wèn)題的原因是Activity使用了系統(tǒng)自帶的主題,現(xiàn)在又兩種方法可以解決上面的問(wèn)題网严,一種找系統(tǒng)里另一個(gè)主題识樱,看看有沒(méi)有適合自己的,直接替換震束。第二種方法就是繼承該主題怜庸,但是將受影響的控件的屬性進(jìn)行修改。

3.源碼地址

https://download.csdn.net/download/lgywsdy/11218183

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垢村,一起剝皮案震驚了整個(gè)濱河市割疾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嘉栓,老刑警劉巖宏榕,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異侵佃,居然都是意外死亡担扑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)趣钱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人胚宦,你說(shuō)我怎么就攤上這事首有。” “怎么了枢劝?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵井联,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我您旁,道長(zhǎng)烙常,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蚕脏,結(jié)果婚禮上侦副,老公的妹妹穿的比我還像新娘。我一直安慰自己驼鞭,他們只是感情好秦驯,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著挣棕,像睡著了一般译隘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洛心,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天固耘,我揣著相機(jī)與錄音,去河邊找鬼词身。 笑死厅目,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的偿枕。 我是一名探鬼主播璧瞬,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼渐夸!你這毒婦竟也來(lái)了嗤锉?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤墓塌,失蹤者是張志新(化名)和其女友劉穎瘟忱,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體苫幢,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡访诱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了韩肝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片触菜。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖哀峻,靈堂內(nèi)的尸體忽然破棺而出涡相,到底是詐尸還是另有隱情,我是刑警寧澤剩蟀,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布催蝗,位于F島的核電站,受9級(jí)特大地震影響育特,放射性物質(zhì)發(fā)生泄漏丙号。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望犬缨。 院中可真熱鬧喳魏,春花似錦、人聲如沸遍尺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乾戏。三九已至迂苛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鼓择,已是汗流浹背三幻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呐能,地道東北人念搬。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像摆出,于是被迫代替她去往敵國(guó)和親朗徊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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