Android Theme以及解決啟動黑屏的方法詳解
前言
本文主要介紹了關(guān)于Android Theme及解決啟動黑屏的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧
1.修改AndroidManifest.xml 設(shè)置App的全局Theme或者Activity的界面Theme
<application android:allowBackup="true" android:icon="@drawable/ipod_icon" android:label="@string/app_name" android:launchMode="singleTask"> <!-- iPod主界面 --> <activity android:name="com.apical.apicalipod.IPodMainActivity" <!-- 使用上面定義的樣式 mythou--> android:theme="@style/Theme.AppStartLoad" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> //...... </application>
•可以在Activity里面增加上面自定義的樣式。另外在Application里面增加也是可以的,而且是全局效果。
•自定義Theme放在 /res/values/styles.xml 里面。如果沒有這個文件,自己添加一個即可。
•如果存在多個Activity切換,中間也可能會存在短暫黑屏問題。原因也是Activity啟動的時候需要初始化加載數(shù)據(jù),如果想避免這種情況,可以在你切換的Activity里面增加上面的樣式。
•上面兩種樣式都可以避免黑屏??梢詫?shí)際測試一下你的程序選擇一種效果。
•這個只是把黑屏避免了,但是如果你程序初始化啟動慢,還是會給人程序啟動慢的感覺。需要自行優(yōu)化程序初始化過程。
android:theme="@android:style/Theme.Dialog" //Activity顯示為對話框模式 android:theme="@android:style/Theme.NoTitleBar" //不顯示應(yīng)用程序標(biāo)題欄 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" //不顯示應(yīng)用程序標(biāo)題欄,并全屏 android:theme="Theme.Light " //背景為白色 android:theme="Theme.Light.NoTitleBar" //白色背景并無標(biāo)題欄 android:theme="Theme.Light.NoTitleBar.Fullscreen" //白色背景,無標(biāo)題欄,全屏 android:theme="Theme.Black" //背景黑色 android:theme="Theme.Black.NoTitleBar" //黑色背景并無標(biāo)題欄 android:theme="Theme.Black.NoTitleBar.Fullscreen" //黑色背景,無標(biāo)題欄,全屏 android:theme="Theme.Wallpaper" //用系統(tǒng)桌面為應(yīng)用程序背景 android:theme="Theme.Wallpaper.NoTitleBar" //用系統(tǒng)桌面為應(yīng)用程序背景,且無標(biāo)題欄 android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" //用系統(tǒng)桌面為應(yīng)用程序背景,無標(biāo)題欄,全屏 android:theme="Theme.Translucent" //透明背景 android:theme="Theme.Translucent.NoTitleBar" //透明背景并無標(biāo)題 android:theme="Theme.Translucent.NoTitleBar.Fullscreen" //透明背景并無標(biāo)題,全屏 android:theme="Theme.Panel " //面板風(fēng)格顯示 android:theme="Theme.Light.Panel" //平板風(fēng)格顯示
Theme和Style
Android里面除了Theme外還有Style,例如下面是Launcher里面配置workspace的一個Style
<style name="WorkspaceIcon"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">match_parent</item> <item name="android:layout_gravity">center</item> <item name="android:gravity">center_horizontal</item> <item name="android:singleLine">true</item> <item name="android:ellipsize">marquee</item> <item name="android:textSize">12sp</item> <item name="android:textColor">#FFF</item> <item name="android:shadowRadius">2.0</item> <item name="android:shadowColor">#B0000000</item> </style>
Style可以理解為一組屬性集合,方便不同的View設(shè)置使用,我們在View里面使用Style的時候,跟使用Theme是一樣的應(yīng)用方法。那么Style和Theme有什么區(qū)別?
下面列出兩者區(qū)別:
•樣式用在單獨(dú)的View,如:Button、TextView等
•主題通過AndroidManifest.xml中的和用在整個應(yīng)用或者某個 Activity,主題對整個應(yīng)用或某個Activity存在全局性影響。
•如果一個應(yīng)用使用了主題,同時應(yīng)用下的view也使用了樣式,那么當(dāng)主題與樣式屬性發(fā)生沖突時,樣式的優(yōu)先級高于主題。
上面就是通過Theme解決程序啟動閃黑屏問題,并且講解了Theme和Style,通過Theme配置,其實(shí)還可以做個歡迎頁面。不過我們都希望程序啟動速度越快越好,因此還是需要多多優(yōu)化自己的程序。
2.解決啟動黑屏問題:
出現(xiàn)的原因:
1 原因 加載onCreate 方法 執(zhí)行方法加載數(shù)據(jù)耗時,需要跑完onCreate和onResume才會顯示界面
2 閃黑屏的原因主要是我們啟動Activity的時候,需要跑完onCreate和onResume才會顯示界面。也就是說需要處理一些數(shù)據(jù)后,才會顯示。按照這種思路,是不是我把初始化的工作盡量減少就可以避免黑屏?事實(shí)是,就算你onCreate啥都不做,仍然會閃一下黑屏,因?yàn)槌跏蓟馕鼋缑鏁r需要一定時間。下面是解決辦法:
解決:
設(shè)置背景圖Theme
<style name="Theme.AppStartLoad" parent="android:Theme"> <item name="android:windowBackground">@drawable/ipod_bg</item> <item name="android:windowNoTitle">true</item> </style> // ps: 如果要設(shè)置這個靜止頁全屏則外加一句: // <item name="android:windowFullscreen">true</item> 即可 //2、設(shè)置透明Theme <style name="Theme.AppStartLoadTranslucent" parent="android:Theme"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> </style>
上面我定義了兩種Theme,第一種Theme就是設(shè)置一張背景圖。當(dāng)程序啟動時,首先顯示這張背景圖,避免出現(xiàn)黑屏。第二種Theme是把樣式設(shè)置為透明,程序啟動后不會黑屏而是整個透明了,等到界面初始化完才一次性顯示出來。
下面說說兩種方式的優(yōu)缺點(diǎn):
•Theme1 程序啟動快,界面先顯示背景圖,然后再刷新其他界面控件。給人刷新不同步感覺。
•Theme2 給人程序啟動慢感覺,界面一次性刷出來,刷新同步。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Android中實(shí)現(xiàn)TCP和UDP傳輸實(shí)例
這篇文章主要介紹了Android中實(shí)現(xiàn)TCP和UDP傳輸實(shí)例,本文給出了TCP服務(wù)器端代碼、TCP客戶端代碼、UDP服務(wù)器端代碼、UDP客戶端代碼等代碼實(shí)例,需要的朋友可以參考下2015-03-03Flutter之可滾動組件子項(xiàng)緩存?KeepAlive詳解
這篇文章主要為大家詳細(xì)介紹了Flutter之可滾動組件子項(xiàng)緩存?KeepAlive,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08Android EditText追加空格、限制字符等方法示例
這篇文章主要給大家介紹了關(guān)于Android EditText追加空格、限制字符等的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Android?NotificationListenerService?通知服務(wù)原理解析
這篇文章主要為大家介紹了Android?NotificationListenerService?通知服務(wù)原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Android短信驗(yàn)證碼(用的Mob短信驗(yàn)證)
這篇文章主要為大家詳細(xì)介紹了Android短信驗(yàn)證碼,使用Mob短信驗(yàn)證,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05Android studio listview實(shí)現(xiàn)列表數(shù)據(jù)顯示 數(shù)據(jù)循環(huán)顯示效果
這篇文章主要介紹了Android studio listview實(shí)現(xiàn)列表數(shù)據(jù)顯示 數(shù)據(jù)循環(huán)顯示功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04WindowManagerService服務(wù)是如何以堆棧的形式來組織窗口
我們知道,在Android系統(tǒng)中,Activity是以堆棧的形式組織在ActivityManagerService服務(wù)中的;在本文中,我們就詳細(xì)分析WindowManagerService服務(wù)是如何以堆棧的形式來組織窗口的2013-01-01