Android Activity作为对话框

d-m*_*man 248 android android-dialog android-activity

我有一个名为Activity的whereActity子对话框.现在,我想将此活动显示为另一个活动的对话框.

我怎样才能做到这一点?

在此输入图像描述

d-m*_*man 528

要以对话框的形式启动活动,我将其定义为AndroidManifest.xml:

<activity android:theme="@android:style/Theme.Dialog" />
Run Code Online (Sandbox Code Playgroud)

activity标记内使用此属性可避免对话框出现在最近使用的应用列表中

android:excludeFromRecents="true"
Run Code Online (Sandbox Code Playgroud)

如果要在用户单击对话框外部时停止销毁对话框/活动:

之后setContentView()在您的Activity使用:

this.setFinishOnTouchOutside(false);

现在当我调用startActivity()它时显示为对话框,当用户按下后退按钮时显示先前的活动.

请注意,如果您正在使用ActionBarActivity(或AppCompat主题),则需要使用@style/Theme.AppCompat.Dialog.

  • 使用android:theme ="@ android:style/Theme.Dialog"是要走的路,但不要忘记使用excludeFromRecents = true,否则你的对话框将出现在最近使用的应用程序中(按住Home键). (185认同)
  • 请注意,如果您使用的是ActionBarActivity(或AppCompat主题),则需要使用`@ style/Theme.AppCompat.Dialog` (41认同)
  • @Wolverine,添加`this.setFinishOnTouchOutside(false);``setContentView()`之后的方法,以防止在您创建的对话框外单击时销毁活动. (8认同)
  • 我有相关的活动作为对话框..我把活动作为对话,但问题是当我点击活动外它自动关闭.. ??? 有没有任何相关的解决方案.. ?????? (7认同)
  • @Emmanuel,它必须是android:excludeFromRecents ="true"注意双引号 (7认同)
  • 如果使用LinearLayout作为根布局,我也会遇到对话框大小的问题.如果你要设置requestWindowFeature(Window.FEATURE_NO_TITLE)或getWindow(),使用RelativeLayout会有所帮助.setFeatureDrawableResource(Window.FEATURE_NO_TITLE,android.R.drawable.ic_dialog_alert) (3认同)

小智 42

使用此代码,以便在用户触摸对话框外时不会关闭对话框活动:

this.setFinishOnTouchOutside(false);
Run Code Online (Sandbox Code Playgroud)

需要API级别11


her*_*rtD 27

您可以在values/styles.xml中定义此样式以执行更多以前的Splash:

   <style name="Theme.UserDialog" parent="android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowBackground">@drawable/trans</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

并使用AndroidManifest.xml:

   <activity android:name=".SplashActivity"
          android:configChanges="orientation"
          android:screenOrientation="sensor"
          android:theme="@style/Theme.UserDialog">
Run Code Online (Sandbox Code Playgroud)

  • re` @ drawable/trans`:你应该可以使用`@android:color/transparent`来创建一个`ColorDrawable`用作背景. (2认同)

M. *_*han 22

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

呼叫setTheme(android.R.style.Theme_Dialog)调用之前setContentView(...)super.oncreate()你的活动.

2 - 如果您不打算更改可以使用的活动主题样式

<activity android:theme="@android:style/Theme.Dialog" />
Run Code Online (Sandbox Code Playgroud)

(如@faisal khan所述)


nef*_*tou 17

如果您需要Appcompat版本

style.xml

    <!-- Base application theme. -->
    <style name="AppDialogTheme" parent="Theme.AppCompat.Light.Dialog">
        <!-- Customize your theme here. -->
        <item name="windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

yourmanifest.xml

    <activity
          android:name=".MyActivity"
          android:label="@string/title"
          android:theme="@style/AppDialogTheme">
    </activity>
Run Code Online (Sandbox Code Playgroud)

  • 同样对我来说,&lt;item name =“ android:windowNoTitle”&gt; true &lt;/ item&gt;`不起作用(Android 5.0.1),我不得不改为`&lt;item name =“ windowNoTitle”&gt; true &lt;/ item&gt; ` (2认同)

aar*_*ell 16

如果您的活动是作为对话框呈现的,只需在活动的xml中添加一个按钮,

<Button
    android:id="@+id/close_button"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Dismiss" />
Run Code Online (Sandbox Code Playgroud)

然后在Activity的Java代码中附加一个单击侦听器.在听众中,只需打电话finish()

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

那应该会关闭你的对话框,让你回到调用活动.


Ism*_*bal 7

如果要删除活动标题并为对话框提供自定义视图,请将以下内容添加到清单的活动块中

android:theme="@style/Base.Theme.AppCompat.Dialog"
Run Code Online (Sandbox Code Playgroud)

并使用您想要的视图设计您的activity_layout