如何将一个Activity以弹出窗口的形式显示在另一个Activity上?

43

我有一个Activity A,在视图中有一个按钮B。 如果有人按下B,我希望有一个弹出窗口可以占据屏幕的某个部分,使得A在该区域不可见,但是A的其余部分是可见但不活动的。如何实现这一点?

8个回答

73

如果您想使用Activity而不是对话框来实现此操作,可以在清单文件中将Activity的主题设置为android:theme="@android:style/Theme.Dialog" - 这将使Activity看起来像一个对话框(浮动在其下方的任何东西之上)。


不知道为什么对我没起作用 :(。我尝试使用setTheme(android.R.style.Theme_Dialog)来设置主题。 - bhups
你尝试过在清单文件中将主题设置为活动吗? - oli
7
完美!我该如何移除标题? - Skynet
1
在清单文件中添加以下内容:android:label="自定义标题栏" - TheLogicGuy

24

对于AppCompat,添加

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

到AndroidManifest中的活动


它可以工作,但如何添加取消按钮? - Pisumathu

6

Dialog类非常适合此类操作。您可以在这里找到简单的示例。


3

对于 appcompat,可以在清单文件中使用此选项。

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

3

补充一下 oli 的回答,确保在应用程序中使用的主题中使用对话框。

在我的情况下,我使用了 android:theme="@android:style/Theme.Holo.Light.Dialog"


1

将主题设置为android:theme="@android:style/android:Theme.Holo.Panel"对我有用。

步骤 - 1. 在清单文件中为活动设置主题android:theme="@android:style/android:Theme.Holo.Panel"(这必须更改为正在使用的任何主题)。例如:

<activity
      android:name=".EditActivity"
      android:theme="@android:style/android:Theme.Holo.Panel"
      android:label="@string/title_activity_edit" >
</activity>
  1. 在活动资源的XML文件中,在根布局上设置适当的填充和宽度。我已将其设置为0,并在开头添加了一个子布局,使用alpha属性显示前一个活动的某些部分。

0

如果你正在使用Material Design,你应该使用@android:style/Theme.Material.Dialog.NoActionBar


0
你可以通过编程来实现它。
创建类MyDialog。
    import android.app.Activity;
    import android.app.Dialog;
    import android.view.Window;
    import android.widget.TextView;

    public class MyDialoge{
        Activity activity;
        TextView txt_Message;
        Dialog dialog;
        public ViewDialog(Activity activity) {

            this.activity = activity;

        }

       public void showDialog(String message){
        dialog = new Dialog(activity);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(false);
        dialog.setContentView(R.layout.custom_progress_dialog);


         txt_Message = dialog.findViewById(R.id.txt_message);
         txt_Message.setText(message);


       //if you want to dimiss the dialog
       //dialog.dimiss()


        dialog.show();

    }
        public void dimiss(){

            try {
                dialog.dismiss();
            } catch (Exception e) {
                e.printStackTrace();
            }


        }



    }

接下来创建布局 -> 将其命名为my_dialog

<?xml version="1.0" encoding="utf-8"?> 
      <RelativeLayout 
       xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_gravity="center"

        >

       <TextView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_centerInParent="true"
           android:text="Hello PopUp Message"/>


    </RelativeLayout>

在你的Activity中

MyDialog myDialog = new MyDialog(MainActivity.this);

        myDialog.showDialog("Say Hello to Me");

关闭

 myDialog.dimiss();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接