読者です 読者をやめる 読者になる 読者になる

【Android】アプリ起動時のちらつき対策

 

アプリ起動時に、タイトルが一瞬ちらつく場合の対策です。

 

スプラッシュ画面を作成して対応する方法です。

(スプラッシュ画面はアプリ起動時にロゴやアプリ名などが一瞬でるあれです)

 

以下はスプラッシュ画面です。

 

 

f:id:stanleyblenz:20161010235606p:plain

 

 

 

----------------------------------------------------------------------------------------------------

AndroidManifest.xml

<application
  android:allowBackup="true"
  android:icon="@mipmap/ic_launcher"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
  <activity
    android:name=".SplashActivity"
    android:theme="@style/NormalTheme">
    <intent-filter>
      <action android:name="android.intent.action.MAIN"/>
      <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
  </activity>
  <activity
    android:name=".MainActivity">
  </activity>

</application>

 

スプラッシュ画面用のテーマを用意します。

最初に起動する画面になるので、intent-filterのMAIN、LAUNCHERも移動します。

 

----------------------------------------------------------------------------------------------------

styles.xml

<resources>
  <!--スプラッシュ画面-->
  <style name="NormalTheme" parent="android:Theme.NoTitleBar">
    <item name="android:background">#ffffff</item>
  </style>
</resources>

 

テーマをタイトルなしにします。

画面の背景を白色にします。

 

----------------------------------------------------------------------------------------------------

splash.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:gravity="center">
  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/app_name"
    android:textSize ="50dp"/>
</LinearLayout>

 

スプラッシュ画面用のレイアウトです。

アプリ名を中央に表示するようにしています。

 

----------------------------------------------------------------------------------------------------

SplashActivity.java

public class SplashActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

    //1秒遅延させてsplashHandlerを実行
    Handler handler = new Handler();
    handler.postDelayed(new splashHandler(), 1000);
  }
  class splashHandler implements Runnable {
    public void run() {

      //スプラッシュ完了後に実行するActivity
      Intent intent = new Intent(getApplication(), MainActivity.class);
      startActivity(intent);
      SplashActivity.this.finish();//SplashActivityを終了させる
    }
  }
}

 

スプラッシュ画面を1秒間表示する設定をします。

スプラッシュ画面の後に、MainActivityを呼び出し、

スプラッシュ画面を終了します。

 

----------------------------------------------------------------------------------------------------

 

スプラッシュ画面に文字だけを表示するサンプルですが、

もちらん画像を表示することも可能です。