天天看點

高效啟動頁(Splash)

很多應用程式啟動時都需要一個頁面展示公司品牌或者Logo,或者即便不需要這個頁面,如果布局比較複雜,啟動應用的時候會有一個短暫的白屏(跟系統主題相關),往往我們會單獨寫一個Activity,然後顯示一張圖檔或者Logo,設定固定的時間延遲啟動真正的MainActivity,這樣未免小題大做,分享一個小技能:

首先使用layer-list定義一個層級的drawable:

1

2

3

4

5

6

7

8

9

10

11

<code>&lt;</code><code>layer-list</code> <code>xmlns:android</code><code>=</code><code>"http://schemas.android.com/apk/res/android"</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>item</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>color</code> <code>android:color</code><code>=</code><code>"@color/background_material_light"</code><code>/&gt;</code>

<code>    </code><code>&lt;/</code><code>item</code><code>&gt;</code>

<code>        </code><code>&lt;</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>/&gt;</code>

<code>&lt;/</code><code>layer-list</code><code>&gt;</code>

定義底色和一個bitmap展示Logo,Logo居中顯示,超出bitmap大小的區域不進行平鋪或者其他處理;

然後應用到全局背景中(應用啟動時,會先渲染主題,如果沒有設定預設使用系統的主題):

<code>&lt;</code><code>style</code> <code>name</code><code>=</code><code>"AppTheme"</code> <code>parent</code><code>=</code><code>"Theme.AppCompat.Light.DarkActionBar"</code> <code>/&gt;</code>

<code> </code> 

<code>&lt;</code><code>style</code> <code>name</code><code>=</code><code>"AppTheme.BrandedLaunch"</code> <code>parent</code><code>=</code><code>"AppTheme"</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>item</code> <code>name</code><code>=</code><code>"android:windowBackground"</code><code>&gt;@drawable/branded_logo&lt;/</code><code>item</code><code>&gt;</code>

<code>&lt;/</code><code>style</code><code>&gt;</code>

入口Activity設定主題:

<code>&lt;</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>&gt;</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,如需轉載請自行聯系原作者

繼續閱讀