我有一个名为whereactivity的活动,它也有子对话框。现在,我想将这个活动显示为另一个活动的对话框。

我该怎么做呢?


当前回答

1 -你可以动态地使用与对话框和全屏相同的活动:

在Activity中调用setContentView(…)和super.oncreate()之前调用setTheme(android.R.style.Theme_Dialog)。

2 -如果你不打算改变活动主题风格,你可以使用

<activity android:theme="@android:style/Theme.Dialog" />

(正如@faisal khan所提到的)

其他回答

有时候你可以得到下面给出的异常

导致:java.lang.IllegalStateException:你需要使用一个主题。AppCompat主题(或后代)。

所以你可以用简单的方法来解决

在manifest中为appCompact添加活动主题。

android:theme="@style/Theme.AppCompat.Dialog"

它对某些人是有帮助的。

创建活动作为对话框,这是完整的例子

AndroidManife.xml <activity android:name=".appview.settings.view.DialogActivity" android:excludeFromRecents="true" android:theme="@style/Theme.AppCompat.Dialog"/> DialogActivity.kt class DialogActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_dialog) this.setFinishOnTouchOutside(true) btnOk.setOnClickListener { finish() } } } activity_dialog.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#0072ff" android:gravity="center" android:orientation="vertical"> <LinearLayout android:layout_width="@dimen/_300sdp" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical"> <TextView android:id="@+id/txtTitle" style="@style/normal16Style" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:paddingTop="20dp" android:paddingBottom="20dp" android:text="Download" android:textColorHint="#FFF" /> <View android:id="@+id/viewDivider" android:layout_width="match_parent" android:layout_height="2dp" android:background="#fff" android:backgroundTint="@color/white_90" app:layout_constraintBottom_toBottomOf="@id/txtTitle" /> <TextView style="@style/normal14Style" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:paddingTop="20dp" android:paddingBottom="20dp" android:text="Your file is download" android:textColorHint="#FFF" /> <Button android:id="@+id/btnOk" style="@style/normal12Style" android:layout_width="100dp" android:layout_height="40dp" android:layout_marginBottom="20dp" android:background="@drawable/circle_corner_layout" android:text="Ok" android:textAllCaps="false" /> </LinearLayout> </LinearLayout>

1 -你可以动态地使用与对话框和全屏相同的活动:

在Activity中调用setContentView(…)和super.oncreate()之前调用setTheme(android.R.style.Theme_Dialog)。

2 -如果你不打算改变活动主题风格,你可以使用

<activity android:theme="@android:style/Theme.Dialog" />

(正如@faisal khan所提到的)

使用下面的代码,当用户在对话框外触摸时,对话框活动不会关闭:

this.setFinishOnTouchOutside(false);

要求API等级11

如果你的活动被渲染成一个对话框,只需在你的活动的xml中添加一个按钮,

<Button
    android:id="@+id/close_button"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Dismiss" />

然后在Activity的Java代码中附加一个单击侦听器。在侦听器中,只需调用finish()

Button close_button = (Button) findViewById(R.id.close_button);
close_button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        finish();
    }
});

这应该会终止对话框,返回到调用活动。