当前位置: 首页 > 知识库问答 >
问题:

如何在Android中创建自定义对话框?

吕皓
2023-03-14

我想创建一个如下所示的自定义对话框

我试过以下几件事。

>

  • 我创建了AlertDialog.Builder的子类,并使用了自定义标题和自定义内容视图,但结果不是预期的。

    另一个尝试是子类DialogFragment并自定义onCreateDialog中的对话框,但结果并不像预期的那样。

    然后我尝试使用一个普通的对话框类。结果不如预期。

    在这三种情况下,问题是当我忽略标题视图时,对话框的大小不像预期的那样,而当我使用标题视图时,结果是内容视图周围有一个很粗的边框(这看起来真的很糟糕)。现在我脑子里有两个问题...

    >

  • 我怎样才能做到?由于我已经尝试了这么多事情,直接回答会更感激。

    在android应用程序中显示错误或警告对话框的最佳方法是什么?

    EDIT Android Developer文档建议我们使用DialogFragments或Dialogs向用户显示错误/警报消息。然而,有一次他们说...

    提示:如果您想要一个自定义对话框,您可以将activity显示为对话框,而不是使用对话框API。只需创建一个activity,并将其主题设置为manifest元素中的theme.holo.dialog。

    那是什么意思?仅仅为了显示错误信息而使用activity是不是太过分了???

  • 共有2个答案

    冀鸿才
    2023-03-14

    这是一个示例对话框create with XML。

    下一个代码xml只是一个例子,设计或视图在这里实现:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffffff">
    
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:id="@+id/a"
        android:gravity="center"
        android:background="#DA5F6A"
        android:src="@drawable/dialog_cross"
        android:scaleType="fitCenter" />
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TEXTO"
        android:id="@+id/text_dialog"
        android:layout_below="@+id/a"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginBottom="20dp"
        android:textSize="18sp"
        android:textColor="#ff000000"
        android:layout_centerHorizontal="true"
        android:gravity="center_horizontal" />
    
    <Button
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:text="OK"
        android:id="@+id/btn_dialog"
        android:gravity="center_vertical|center_horizontal"
        android:layout_below="@+id/text_dialog"
        android:layout_marginBottom="20dp"
        android:background="@drawable/btn_flat_red_selector"
        android:layout_centerHorizontal="true"
        android:textColor="#ffffffff" />
    
    </RelativeLayout>
    

    这几行代码是Drawable的资源:

    android:src="@drawable/dialog_cross"
    android:background="@drawable/btn_flat_red_selector"
    

    您可以创建一个类扩展对话框,也可以这样做:

    public class ViewDialog {
    
        public void showDialog(Activity activity, String msg){
            final Dialog dialog = new Dialog(activity);
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dialog.setCancelable(false);
            dialog.setContentView(R.layout.dialog);
    
            TextView text = (TextView) dialog.findViewById(R.id.text_dialog);
            text.setText(msg);
    
            Button dialogButton = (Button) dialog.findViewById(R.id.btn_dialog);
            dialogButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog.dismiss();
                }
            });
    
            dialog.show();
    
        }
    }
    

    最后的形式调用,对您的activity举例:

    ViewDialog alert = new ViewDialog();
    alert.showDialog(getActivity(), "Error de conexión al servidor");
    

    希望对你有用。

    更新

    对话框得可绘制XML:

    <shape xmlns:android="schemas.android.com/apk/res/android"> <stroke android:width="2dp" android:color="#FFFFFF" /> <gradient android:angle="180" android:endColor="@color/NaranjaOTTAA" android:startColor="@color/FondoActionBar" /> <corners android:bottomLeftRadius="7dp" android:bottomRightRadius="7dp" android:topLeftRadius="7dp" android:topRightRadius="7dp" /> </shape> 
    

    此xml由@GastónSaillén提供。

    陈宏胜
    2023-03-14

    在这里,我创建了一个简单的对话框,如:

    custom_dialog.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="80dp"
        android:background="#3E80B4"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/txt_dia"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="10dp"
            android:text="Do you realy want to exit ?"
            android:textColor="@android:color/white"
            android:textSize="15dp"
            android:textStyle="bold"/>
        
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="#3E80B4"
            android:orientation="horizontal" >
    
            <Button
                android:id="@+id/btn_yes"
                android:layout_width="100dp"
                android:layout_height="30dp"
                android:background="@android:color/white"
                android:clickable="true"
                android:text="Yes"
                android:textColor="#5DBCD2"
                android:textStyle="bold" />
    
            <Button
                android:id="@+id/btn_no"
                android:layout_width="100dp"
                android:layout_height="30dp"
                android:layout_marginLeft="5dp"
                android:background="@android:color/white"
                android:clickable="true"
                android:text="No"
                android:textColor="#5DBCD2"
                android:textStyle="bold" />
        </LinearLayout>
    
    </LinearLayout>
    

    您必须扩展对话框并且实现onClickListener

    public class CustomDialogClass extends Dialog implements
        android.view.View.OnClickListener {
    
      public Activity c;
      public Dialog d;
      public Button yes, no;
    
      public CustomDialogClass(Activity a) {
        super(a);
        // TODO Auto-generated constructor stub
        this.c = a;
      }
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.custom_dialog);
        yes = (Button) findViewById(R.id.btn_yes);
        no = (Button) findViewById(R.id.btn_no);
        yes.setOnClickListener(this);
        no.setOnClickListener(this);
    
      }
    
      @Override
      public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btn_yes:
          c.finish();
          break;
        case R.id.btn_no:
          dismiss();
          break;
        default:
          break;
        }
        dismiss();
      }
    }
    

    如何调用Dialog?

    R.id.TXT_Exit:
    CustomDialogClass cdd=new CustomDialogClass(Values.this);
    cdd.show();  
    

    过了很长时间,我的一个朋友让我做一个带有透明背景的曲面对话框。所以,在这里我实现了它。

    要生成弯曲形状,您需要创建单独的curve_shap.xml,如下所示,

    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <solid android:color="#000000" />
    
        <stroke
            android:width="2dp"
            android:color="#ffffff" />
    
        <corners
            android:bottomLeftRadius="20dp"
            android:bottomRightRadius="20dp"
            android:topLeftRadius="20dp"
            android:topRightRadius="20dp" />
    
    </shape>
    

    现在,在主视图布局中添加这个curve_shap.xml。在我的示例中,我使用了linearlayout

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="80dp"
            android:background="@drawable/curve_shap"
            android:orientation="vertical" >
    ...
    </LinearLayout>
    

    这怎么叫?

    CustomDialogClass cdd = new CustomDialogClass(MainActivity.this);
    cdd.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    cdd.show();
    

    我希望这对你有用。

     类似资料:
    • 问题内容: 有人可以告诉我如何创建与链接[here] [1]类似/完全相同的上述对话框视图,问题的重点是在图片的中心创建视图? 我已经进行了一些研究,这使我想知道我应该使用自定义xml创建自定义对话框视图还是应该使用alertdialog创建上面显示的确切视图可编程性?即使有alertdialog的可能,在给出alertdialog限制的情况下,我该如何容纳对话框图片中间显示的那么多textvie

    • 我想做的是:我想在android中创建一个圆角的自定义对话框。 正在发生的事情:我能够使自定义对话框,但它没有圆角。我试着添加一个选择器,但我仍然无法实现圆角。 下面是我的相同代码: Java代码: xml代码:

    • 我已经在adobe xd中设计了一个自定义对话框,但现在我想像在xml和Java中一样启动它。那么我现在应该做什么来创建一个自定义对话框。我知道如何创建一个对话框,但不是自定义对话框。请帮帮忙。

    • 问题内容: 我在JFrame上有一个按钮,当单击该按钮时,我希望对话框弹出并带有多个文本区域供用户输入。我一直在四处寻找解决方法,但是我一直感到困惑。有人可以帮忙吗? 问题答案: 如果您不需要太多自定义行为,则JOptionPane可以节省大量时间。它负责OK / Cancel选项的放置和本地化,并且是一种无需定义自己的类即可显示自定义对话框的快捷方法。大多数情况下,JOptionPane中的“

    • 问题内容: 我的应用程序显示了许多自定义对话框,例如“是/否”或“接受/取消决定”,并且在编写代码时,我意识到遵循相同的模式重复了太多代码。 我想建立一个通用类,但我不知道该怎么做,或更确切地说,我不知道该怎么做(接口,抽象类,继承,静态类等)。 这是我目前的课程: } 这就是我需要使用此类时要做的事情: 我敢肯定它是可改进的,但是您怎么能做到呢? 谢谢 问题答案: 首先创建一个Base 来保持的

    • 本文向大家介绍Android如何创建自定义ActionBar,包括了Android如何创建自定义ActionBar的使用技巧和注意事项,需要的朋友参考一下 当多个界面都有很多相似部分时,可以考虑创建一个功能较全的模板。而在需要时,可以通过引用模板来实现自己想要实现的功能。比如适配器 Adapter,当很多的适配器都差不多时,就可以通过打造一个通用的适配器来实现。本例中主要是如何创建自定义的 Act