5

我现在在几个不同的应用程序中遇到了这个问题,但我似乎找不到解决方案。

如果在 an 的 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 中从未出现问题)。该错误源于新 Activity 的动画在旧 Activity 被绘制之前发生,但它仅在“旧”Activity 是 Task 中的第一个 Activity 时才会出现。

一种解决方法是禁用主题的动画。最简单的方法是使用扩展主对话框主题的新主题。

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>

Then just reference it in your AndroidManifest.xml:

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

Obviously, you loose the animation, but at least you can see it :)

Note: commonsware.com's solution worked fine too with the caveat I noted in the comments.

于 2009-09-19T01:21:11.067 回答
1

这里只是猜测...

我认为@android:style/Theme.Dialog大部分背景都是半透明的。最初,您MainActivity的背景是黑色的。如果在你开始画画startActivityForResult()之前就开始了,那可能会解释你的问题。MainActivity

尝试使用postDelayed()on aView延迟startActivityForResult()几百毫秒,看看是否会改变行为。

于 2009-09-17T09:20:27.283 回答