当按下我自己的软键盘键时无法添加对话框
问题描述:
当我尝试打开对话框时,出现以下android异常。当我按下自己的SoftKeyboard键时,我该如何解决这个问题?当按下我自己的软键盘键时无法添加对话框
BadTokenException: Unable to add window -- token null is not for an application
com.example.android.softkeyboard.SoftKeyboard.diqalog(SoftKeyboard.java:759)
com.example.android.softkeyboard.SoftKeyboard.onKey(SoftKeyboard.java:526)
android.inputmethodservice.KeyboardView.onModifiedTouchEvent(KeyboardView.java:1252)
答
首先,你不能从一个远程服务显示一个对话框,你只能从运行Activity
内这样做,这就是为什么你得到一个BadTokenException
。但也有解决问题的对策:
1)提出了一个Activity
与Theme.Dialog
主题:
<activity
android:name="com.srgtuszy.activity"
android:theme="@android:style/Theme.Dialog"
/>
,并启动活动作为一项新的任务:
Intent intent = new Intent(context, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
这样,你会得到一个看起来就像对话一样的活动。
2)提出了一个空的,透明的Activity
并显示从活动
申报内AlertDialog
,并像以前一样开始在清单中的活动,但使用透明主题:
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
在该活动中,覆盖onCreate()
方法并且不要拨打setContentView()
并提供AlertDialog
:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Context context = this;
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
dialog.setTitle("Hello!");
dialog.show();
}
这是一个比较冒险的方法,但是通过这种方式,您可以在不关闭输入法的情况下向用户显示对话框,您可以使用它来呈现编辑选项。
如果您只是想通知用户有关某个事件,请考虑使用Notifications
,它们不会分散用户并污染用户界面。
+0
hei,很好的答案,有没有办法可以将结果返回给InpuntMethodService? – Apperside 2013-06-09 13:53:55
粘贴您的代码 – 2012-02-24 12:35:05
final CharSequence [] items = {“Red”,“Green”,“Blue”}; mCurKeyboard = simleyKey; mInputView.setKeyboard(mCurKeyboard); mInputView.closing(); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(“Pick a color”); builder.setItems(项目,新DialogInterface.OnClickListener(){ 公共无效的onClick(DialogInterface对话框,INT项){ Toast.makeText(getApplicationContext(),项[项目],Toast.LENGTH_SHORT).show(); })。show();}}。 – 2012-02-24 13:30:10
给你的问题格式化的代码,你使用TAb BAr? – 2012-02-24 13:31:15