很多應用程式啟動時都需要一個頁面展示公司品牌或者Logo,或者即便不需要這個頁面,如果布局比較複雜,啟動應用的時候會有一個短暫的白屏(跟系統主題相關),往往我們會單獨寫一個Activity,然後顯示一張圖檔或者Logo,設定固定的時間延遲啟動真正的MainActivity,這樣未免小題大做,分享一個小技能:
首先使用layer-list定義一個層級的drawable:
1
2
3
4
5
6
7
8
9
10
11
<code><</code><code>layer-list</code> <code>xmlns:android</code><code>=</code><code>"http://schemas.android.com/apk/res/android"</code><code>></code>
<code> </code><code><</code><code>item</code><code>></code>
<code> </code><code><</code><code>color</code> <code>android:color</code><code>=</code><code>"@color/background_material_light"</code><code>/></code>
<code> </code><code></</code><code>item</code><code>></code>
<code> </code><code><</code><code>bitmap</code>
<code> </code><code>android:src</code><code>=</code><code>"@drawable/launch_logo_image"</code>
<code> </code><code>android:tileMode</code><code>=</code><code>"disabled"</code>
<code> </code><code>android:gravity</code><code>=</code><code>"center"</code><code>/></code>
<code></</code><code>layer-list</code><code>></code>
定義底色和一個bitmap展示Logo,Logo居中顯示,超出bitmap大小的區域不進行平鋪或者其他處理;
然後應用到全局背景中(應用啟動時,會先渲染主題,如果沒有設定預設使用系統的主題):
<code><</code><code>style</code> <code>name</code><code>=</code><code>"AppTheme"</code> <code>parent</code><code>=</code><code>"Theme.AppCompat.Light.DarkActionBar"</code> <code>/></code>
<code> </code>
<code><</code><code>style</code> <code>name</code><code>=</code><code>"AppTheme.BrandedLaunch"</code> <code>parent</code><code>=</code><code>"AppTheme"</code><code>></code>
<code> </code><code><</code><code>item</code> <code>name</code><code>=</code><code>"android:windowBackground"</code><code>>@drawable/branded_logo</</code><code>item</code><code>></code>
<code></</code><code>style</code><code>></code>
入口Activity設定主題:
<code><</code><code>activity</code>
<code> </code><code>android:name</code><code>=</code><code>".MainActivity"</code>
<code> </code><code>android:label</code><code>=</code><code>"@string/app_name"</code>
<code> </code><code>android:theme</code><code>=</code><code>"@style/AppTheme.BrandedLaunch"</code><code>></code>
由于這樣會改變整體的主題,想回到原來的系統預設主題可以在onCreate中動态更換:
<code>@Override</code>
<code>protected</code> <code>void</code> <code>onCreate(Bundle savedInstanceState) {</code>
<code> </code><code>setTheme(R.style.AppTheme);</code>
<code> </code><code>super</code><code>.onCreate(savedInstanceState);</code>
<code> </code><code>setContentView(R.layout.activity_main);</code>
<code>}</code>
之前會在應用啟動前,顯示一個短暫的白屏:
<a href="http://s3.51cto.com/wyfs02/M02/72/77/wKiom1XkFjjj3lcaAAXNDW0RgZc336.gif" target="_blank"></a>
使用這種方式後:
<a href="http://s3.51cto.com/wyfs02/M00/72/77/wKiom1XkFoTwjtu_AAYYswADWMo994.gif" target="_blank"></a>
本文轉自 breezy_yuan 51CTO部落格,原文連結:http://blog.51cto.com/lbrant/1690191,如需轉載請自行聯系原作者