我想创建一个如下所示的自定义对话框
我尝试了以下方法。
我创建了 AlertDialog.Builder 的子类,并使用了自定义标题和自定义内容 View 并使用了它,但结果与预期不符。
另一种尝试是继承 DialogFragment 并自定义 onCreateDialog 中的对话框,但结果与预期不符。
然后我尝试使用普通的 Dialog 类。结果不如预期。
在所有这三种情况下,问题是当我忽略标题 View 时,对话框的大小与预期不符,当我使用标题 View 时,结果是内容 View 周围有一个粗边框(看起来很糟糕) .现在我有两个问题......
我怎样才能做到这一点?由于我已经尝试了很多东西,因此更感谢直接回答。
在 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是不是太过分了???
最佳答案
这里我创建了一个简单的对话框,比如:
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 Dialog
和implements 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 让我制作一个带有透明背景的曲线形状对话框。所以,这里我已经实现了。
要制作弯曲形状,您需要创建一个单独的 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/