android 对话框(一)Dialog

来源:互联网 发布:淘宝企业店铺年费 编辑:程序博客网 时间:2024/05/17 18:40
Dialog 类是对话框的基类,但您应该避免直接实例化 Dialog,而是使用下列子类之一:
 1.AlertDialog 此对话框可显示标题、最多三个按钮、可选择项列表或自定义布局
 2.DatePickerDialog 或 TimePickerDialog 此对话框带有允许用户选择日期或时间的预定义 UI。这些类定义您的对话框的样式和结构,但您应该将 DialogFragment用作对话框的容器。DialogFragment 类提供您创建对话框和管理其外观所需的所有控件,而不是调用 Dialog 对象上的方法。

使用 DialogFragment 管理对话框可确保它能正确处理生命周期事件,如用户按“返回”按钮或旋转屏幕时。 此外,DialogFragment 类还允许您将对话框的 UI 作为嵌入式组件在较大 UI 中重复使用,就像传统 Fragment 一样(例如,当您想让对话框 UI 在大屏幕和小屏幕上具有不同外观时)。

提醒对话框

AlertDialog.Builder 类提供的 API 允许您创建具有这几种内容(包括自定义布局)的 AlertDialog
 
AlertDialog.Builder builder=new AlertDialog.Builder(FSeachDetailActivity.this);//实例化 AlertDialog.Builder
builder.setMessage("您确定要拨打电话?");//设置提示信息,也可以设置标题setTitle
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {//设置确定按钮及点元事件
public void onClick(DialogInterface dialog, int id) {
//用intent启动拨打电话
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + tel));
startActivity(intent);
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {//设置取消按钮及点击事件
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
AlertDialog dialog=builder.create();//获取 AlertDialog用create方法
dialog.show();
效果图如下:

DialogFragment 作为容器的对话框
   下面的类中是利用DialogFragment作为一个对话框的容器,重写了onCreateDialog()方法,里面和内容和AlertDialog一样
   
//为了兼容版本请确保您导入的是 android.support.v4.app.DialogFragment 类,而不是 android.app.DialogFragment。
public class FireMissilesDialogFragment extends DialogFragment {
 
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
builder.setMessage("您确定要拨打电话?");//设置提示信息,也可以设置标题setTitle
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {//设置确定按钮及点元事件
public void onClick(DialogInterface dialog, int id) {
//用intent启动拨打电话
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "10000"));
startActivity(intent);
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {//设置取消按钮及点击事件
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
return builder.create();//获取 AlertDialog用create方法
}
}
在Activity中用下面的方法调用就可以显示对话框
FireMissilesDialogFragment fireMissilesDialogFragment=new FireMissilesDialogFragment();//Fragment实例
fireMissilesDialogFragment.show(getSupportFragmentManager(),"dialog");//调用show()方法显示对话框;

自定义布局的AlertDialog:
   利用AlertDialog.builder类的setView()方法可以设置自定义布局的对话框。
    首先我们鼻祖自定义如下布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
 
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FFFFBB33"
android:contentDescription="@string/app_name"
android:scaleType="center"
android:src="@mipmap/header_logo" />
 
<EditText
android:id="@+id/phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_marginTop="16dp"
android:hint="电话号码"
/>
 
 
</LinearLayout>
然后改AlertDialog代码:
 
AlertDialog.Builder builder=new AlertDialog.Builder(this);//实例化 AlertDialog.Builder
View view=getLayoutInflater().inflate(R.layout.alertdialog_layout,null);
builder.setView(view);
EditText phoneNoTV=(EditText)view.findViewById(R.id.phone);
final String phoneNo= phoneNoTV.getText()==null?"1000":phoneNoTV.getText().toString();
// builder.setMessage("您确定要拨打电话?");//设置提示信息,也可以设置标题setTitle
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {//设置确定按钮及点元事件
public void onClick(DialogInterface dialog, int id) {
//用intent启动拨打电话
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNo));
startActivity(intent);
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {//设置取消按钮及点击事件
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
AlertDialog dialog=builder.create();//获取 AlertDialog用create方法
dialog.show();
来张自定义的效果图:


下面看一下自定义的dialogFragment

//为了兼容版本请确保您导入的是 android.support.v4.app.DialogFragment 类,而不是 android.app.DialogFragment。
public class CustomFireMissilesDialogFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.alertdialog_layout, null);
// builder.setMessage("您确定要拨打电话?");//设置提示信息,也可以设置标题setTitle
builder.setView(view);
EditText phoneNoTV=(EditText)view.findViewById(R.id.phone);
final String phoneNo= phoneNoTV.getText()==null?"1000":phoneNoTV.getText().toString();
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {//设置确定按钮及点元事件
public void onClick(DialogInterface dialog, int id) {
//用intent启动拨打电话
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNo));
startActivity(intent);
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {//设置取消按钮及点击事件
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
return builder.create();//获取 AlertDialog用create方法
}
}
布局是和自定义的AlertDialog共用的

项目下载地址:
https://github.com/wuhrGH/dialogBGTransparent
qq:763905070  共同学习

1 0
原创粉丝点击