首先,你不能從一個遠程服務顯示一個對話框,你只能從運行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
,它們不會分散用戶並污染用戶界面。
粘貼您的代碼 – 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