有没有办法显示一个无模式的对话框 – 一个对话框,允许用户与对话框之间的任何屏幕进行交互,但还允许用户与对话框进行交互?
我知道吐司,但他们不允许与弹出窗口进行交互.
我知道对话框,但它们是模态的,不允许与背景进行交互.
我知道通知,但我想要的屏幕上是可见的东西.
我基本上想要能够玩一个游戏或什么东西,弹出窗口出现,我有一个新的电子邮件或东西.我可以点击它查看我的电子邮件,但如果我只想继续玩我的游戏,我可以等待它离开.这可能在Android中吗?
解决方法
是的,创建一个具有Style.Dialog风格的活动.这是一个正常的活动,看起来像一个对话框,而无模式和接受事件.
一个例子:
<activity android:name=".activity.dialog.PhotoDialog" android:label="@string/photo_dialog_title" android:theme="@android:style/Theme.Dialog"/>
编辑:
的确,Theme.Dialog模糊了潜在的活动,使其无法访问.我有一个类似的要求,我必须显示上传进度对话框与文本和取消按钮.主要的是在设置WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL并重置WindowManager.LayoutParams.FLAG_DIM_BEHIND.
if (progressDialog == null) { progressDialog = new Dialog(activityRequestingProgressDialog); progressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); progressDialog.setContentView(R.layout.progress_upload); progressBar = (ProgressBar) progressDialog.findViewById(R.id.progressBar); progressText = (TextView) progressDialog.findViewById(R.id.progressText); progressText.setText("0 %"); progressText.setTextSize(18); Button buttonCancel = (Button) progressDialog.findViewById(R.id.btnCancel); buttonCancel.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { cancelProgressDialog(); stopUpload("Upload cancelled."); } }); Window window = progressDialog.getWindow(); window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); window.setGravity(Gravity.BOTTOM); progressDialog.show(); } progressText.setText(text); progressBar.setProgress(percent);
这是这个对话框的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/progressDialog" android:orientation="vertical" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_centerVertical="true"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textSize="18sp" android:padding="10dp" android:text="@string/progress_title"/> <LinearLayout android:id="@+id/progressDialog" android:orientation="horizontal" android:layout_height="wrap_content" android:layout_width="wrap_content" android:padding="10dp" android:layout_centerVertical="true"> <ProgressBar android:id="@+id/progressBar" android:layout_width="150dp" android:layout_height="34dp" android:paddingRight="10dp" android:max="100" android:progress="0" android:fadingEdge="vertical" style="?android:attr/progressBarStyleHorizontal"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/progressText" android:paddingRight="10dp"/> <Button android:layout_height="40dp" android:layout_width="80dp" android:id="@+id/btnCancel" android:text="@string/dialog_cancel"/> </LinearLayout> </LinearLayout>