如何在android中创建自定义对话框? [英] How to create a Custom Dialog box in android?

查看:29
本文介绍了如何在android中创建自定义对话框?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个像下面这样的自定义对话框

I want to create a custom dialog box like below

我尝试了以下方法.

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

  1. I created a subclass of AlertDialog.Builder and used a custom Title and Custom Content View and used that but the result was not as expected.

另一种尝试是对 DialogFragment 进行子类化并在 onCreateDialog 中自定义对话框,但结果并不如预期.

Another attempt was to subclass DialogFragment and customize the dialog inside onCreateDialog that but result was not as expected.

然后我尝试使用一个普通的 Dialog 类.结果不如预期.

Then I tried using a plain Dialog class. The result was not as expected.

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

In all three cases, the problem is when I overlook the title view the size of the dialog is not as expected and when I use Title view the result is there is a thick border around the content view (which really looks bad). Now I have two questions in my mind...

  1. 我怎样才能做到这一点?由于我已经尝试了很多事情,因此直接回答会更受欢迎.

  1. How can I achieve that? As I have already tried so many things, a direct answer will be more appreciated.

在 Android 应用中显示错误或警报对话框的最佳方式是什么?

What is the best way to show an error or alert dialog in an android app?

编辑Android 开发者文档 建议我们应该使用 DialogFragments 或 Dialogs 来向用户.然而,有一次他们说......

EDIT Android Developer Documentation recommends that we should use either DialogFragments or Dialogs for showing Error / Alert Messages to the user. However at one point they say ...

提示:如果您想要自定义对话框,您可以将活动显示为对话框,而不是使用对话框 API.只需创建一个活动并将其主题设置为清单元素中的 Theme.Holo.Dialog.

Tip: If you want a custom dialog, you can instead display an Activity as a dialog instead of using the Dialog APIs. Simply create an activity and set its theme to Theme.Holo.Dialog in the manifest element.

这是什么意思?使用Activity只是为了显示错误信息是不是太过分了???

推荐答案

这里我创建了一个简单的 Dialog,比如:

Here I have created a simple Dialog, like:

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>

你必须extends Dialogimplements 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();
  }
}

如何调用对话框?

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

更新

很久之后,我的一位朋友让我制作一个带有透明背景的曲线形状对话框.所以,我在这里实现了它.

Updates

After a long time one of my friends asked me to make a curved shape dialog with a transparent background. So, Here I have implemented it.

要制作曲线形状,您需要创建一个单独的 curve_shap.XML,如下所示,

To Make a curved shape you need to create a separate curve_shap.XML as below,

<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

Now, add this curve_shap.XML in your main view Layout. In my case I have used 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();

希望对你有用.

这篇关于如何在android中创建自定义对话框?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆