5

現在、いくつかの異なるアプリでこの問題が発生していますが、解決策が見つからないようです。

のonCreate()でActivity、ダイアログテーマを使用するアクティビティを開始すると、画面に何も描画されません...画面全体が黒のままになります。すべてのビューがあり(たとえば、あるEditTextべき場所をタップするとキーボードが表示されます)、表示されません。

愚かな簡単な例、楽しみのために:

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.main);
        startActivityForResult(new Intent(this, CredentialsInputActivity.class), 1);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // do some crap with the result, doesn't really matter what
    }
}

CredentialsInputActivity非常に簡単です...拡張し、マニフェストファイルでActivityテーマを設定します。@android:style/Theme.Dialog

4

2 に答える 2

6

これは 1.5 の既知のバグであることが判明しました(1.6 で修正され、1.1 では問題になりません)。このバグは、古いアクティビティが描画される前に新しいアクティビティのアニメーションが発生することに起因しますが、「古い」アクティビティがタスクの最初のアクティビティであった場合にのみ発生します。

回避策は、テーマのアニメーションを無効にすることです。これを行う最も簡単な方法は、メイン ダイアログ テーマを拡張する新しいテーマを使用することです。

res/values/themes.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CupcakeDialog" parent="android:Theme.Dialog">
        <item name="android:windowAnimationStyle">@null</item>
    </style>
</resources>

次に、AndroidManifest.xml で参照します。

<!-- ... -->
<activity 
    android:name=".CredentialsInputActivity"
    android:label="@string/CredentialsInputActivity_window_title"
    android:theme="@style/CupcakeDialog" />
<!-- ... -->

明らかに、アニメーションが失われますが、少なくとも見ることができます:)

注: commonsware.com のソリューションも、コメントに記載されている警告に従って問題なく機能しました。

于 2009-09-19T01:21:11.067 に答える
1

ここで推測ですが...

@android:style/Theme.Dialog背景の大部分が半透明になるように設定されていると思います。最初は、MainActivityの背景は黒です。ドローをstartActivityForResult()開始する前に が作動している場合、それが問題を説明している可能性があります。MainActivity

postDelayed()on aを使用して数百ミリ秒View遅延させてみてstartActivityForResult()、動作が変わるかどうかを確認してください。

于 2009-09-17T09:20:27.283 に答える