私のアプリの主なアクティビティは、次の属性を持つ Android マニフェスト ファイルで定義されています。
android:theme="@style/Theme.Translucent.NoTitleBar"
これにより、アクティビティが透明になり、メイン ビュー オブジェクトを操作して (たとえば、メイン ビューで呼び出しsetVisibility(View.INVISIBLE)
て)、コードでアプリの透明度を制御できるようになります。これはうまくいきます。
ただし、このアプローチの望ましくない結果の 1 つは、アプリが起動されたときに、メイン ビューが表示されるまで目に見える応答がないことです。通常、アプリのメイン アクティビティの既定の黒の背景は、アプリが起動されるとすぐに表示されます。これにより、ユーザーがランチャーでアイコンをタップすると、アプリの実行が開始されることがすぐに確認できます。ただし、背景が透明な場合、ユーザーはメイン ビューが表示されるまでアプリを起動しているディスプレイの背景を透視し続けるため、 (その間) 何も起こらなかったように見えます。
平凡なパフォーマンスのデバイス (Motorola Droid など) でも、約 1 秒でビューが表示されます。これはそれほど悪くはありません。ただし、非常に遅いデバイス (G1 など) では、4 秒近くかかる場合があります。これは災害ではありませんが、ユーザーがアプリが実際にトリガーされたかどうか疑問に思わないように、すぐに対応したいと思います.
いつものように、透明なテーマを削除しようとしました。これにより、黒い背景を介してすぐに確認できます。ただし、アプリが初期化されると、コードでアクティビティの背景を透明に設定できませんでした。
初めてsetTheme()
呼び出す直前にアクティビティを呼び出して、透明なテーマを渡しましたが、これではアクティビティが透明になりません。setContentView()
私もこれを試しましたonCreate()
(繰り返しますが、 を呼び出す直前にsetContentView()
):
ColorDrawable transparentDrawable = new ColorDrawable(Color.TRANSPARENT);
getWindow().setBackgroundDrawable(transparentDrawable);
これも効果がないようです。
android:windowBackground
また、マニフェストで、ほとんどが透明な PNG であるドローアブルに設定されたテーマを使用しようとしましたが、透明な背景にテキスト (アプリの名前など) を重ねて、ユーザーにその手がかりを提供します。アプリがロードされていました。残念ながら、ドローアブルをテーマの一部として使用すると、メイン ビューが初期化されるまで背景がまったく表示されません。
時間のかかる初期化はすべてワーカー スレッドで既に行われているため、それを達成する方法についてアドバイスを求めているわけではありません。ビュー自体が表示されるまでにある程度の時間がかかります。かなり高速ですが、アプリを起動するとすぐにメイン アクティビティの背景が表示されるという瞬時の応答に勝るものはありません。