7

私はアンドロイドアプリを開発しています。私の場合、アプリが起動すると、AsyncTask がバックグラウンドでデータを取得している間、一時的な画面が表示されます。この一時的な画面には、背景画像 (20 KB) のみが含まれています。しかし、このバックグラウンドでは読み込みに時間がかかります。この結果、アプリを起動すると白い画面しか表示されず、しばらくすると背景画像が表示されます。この問題を取り除き、最初から背景画像を表示する方法についてのアイデアは、開始画面の xml ファイルです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/start"
    android:orientation="vertical" >

</LinearLayout>

ありがとう

4

2 に答える 2

3

私も同じ問題を抱えていました。この素晴らしい人には説明があります。

TL;DR (リンクがうまくいかない場合にのみ、読みに行きます) :「プレビュー ウィンドウの目的は、アプリが起動したことをユーザーにすぐにフィードバックすることですが、アプリ自体を初期化する時間も与えます。アプリを実行する準備が整うと、システムはウィンドウを削除し、アプリのウィンドウとビューを表示します。」これはテーマで設定できます。最小限、私のセットアップ:

/res/values/styles.xml のテーマ:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowBackground">@drawable/app_bg</item>
    </style>
    <!-- Base theme for any other activity other than your starting one. -->
    <!-- If only one activity, just set the splash bg as its bg -->
    <style name="MyTheme.MainActivity" parent="@style/AppTheme">
        <item name="android:windowBackground">@drawable/app_splash_bg</item>
    </style>

</resources>

AndroidManifest.xml:

...
<activity
    android:name=".MainActivity"
    android:theme="@style/MyTheme.MainActivity"
    ...
    <!-- Set the MainActivity theme, can be skipped if you only have -->
    <!-- one activity and did not setup anything other than your base theme -->

MainActivity.java:

@Override
protected void onResume() {
    super.onResume();
    MainActivity.this.getWindow().setBackgroundDrawableResource(R.drawable.app_bg);
}

基本的に、開始アクティビティのスプラッシュ バックグラウンドでテーマをセットアップします。onResume次に、上記の開始アクティビティ 中にバックグラウンドを通常のバックグラウンドに設定します。

また、開始時のアクティビティ テーマの宣言をコメント アウトしてwindowBackground、起動時に元の (私が推測する) 「醜い白い」画面を表示することもできます。

于 2016-02-22T16:15:23.087 に答える
0

一時的な画面で、最初に setContentView() を実行してから、AsyncTask を呼び出す必要があります (プログレス バーが表示され、onPostExecute() で閉じられます)。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // Now start the AsyncTask.

}

また、あるアクティビティから別のアクティビティに移動する場合、多少の遅延が発生することに注意してください。あなたが排除することはできません。一度だけ活動することをお勧めします。

于 2013-01-28T23:06:58.047 に答える