我现在在几个不同的应用程序中遇到了这个问题,我似乎无法找到解决方案。
如果在Activity
的onCreate()中,我启动了一个使用对话框主题的活动,它不会在屏幕上绘制任何内容......整个屏幕都保持黑色。所有观点都在那里(例如,我可以点击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
。
答案 0 :(得分:6)
事实证明,这是1.5中的known bug(在1.6中固定,在1.1中从来不是问题)。该错误源于在绘制旧活动之前发生的新活动的动画,但它仅在“旧”活动是任务中的第一个活动时才会出现。
解决方法是禁用主题的动画。最简单的方法是使用扩展主对话框主题的新主题来实现它。
RES /值/的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的解决方案也适用于我在评论中提到的警告。
答案 1 :(得分:1)
在这里猜一下......
我认为@android:style/Theme.Dialog
的大部分背景设置为半透明。最初,您的MainActivity
背景为黑色。如果startActivityForResult()
在MainActivity
获取之前就已经开始了,那么这可能会解释您的问题。
尝试在postDelayed()
上使用View
将startActivityForResult()
延迟几百毫秒,看看是否会改变行为。