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

标签 android android-dialogfragment android-dialog

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

enter image description here

我尝试了以下方法。

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

  2. 另一种尝试是继承 DialogFragment 并自定义 onCreateDialog 中的对话框,但结果与预期不符。

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

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

  1. 我怎样才能做到这一点?由于我已经尝试了很多东西,因此更感谢直接回答。

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

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

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 Box

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();  

更新

很久以后,我的一个 friend 让我制作一个带有透明背景的曲线形状对话框。所以,这里我已经实现了。

enter image description here

要制作弯曲形状,您需要创建一个单独的 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();

我希望这对你有用。

关于android - 如何在android中创建自定义对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13341560/

相关文章:

android - 如何在 Google Play 商店中排除内存不足的设备

android-animation - Android L通函显示对话框

android - 在实现 DatePickerDialog 的 DialogFragment 中添加中性按钮

android - 用android绘制可触摸层

android - 如何合并两个 ListView 的数据

android - 我突然在Gradle的Android Studio中收到Play-Service-app-indexing:10.0.1错误

android - 防止 ProgressDialog 被 onClick 解雇

android - Android中DialogFragment和FragmentActivity之间的通信

android - 设备旋转后重新排序的 DialogFragments

java - 自定义 setMessage 对话框 TextView 无法转换为 java.lang.CharSequence