第1天Dialog及自定义 Dialog
思路
1.自定义继承Dialog类
2.重写Dialog的方法并添加需要的功能
3.在Activity实例化自定义的对象
继承Dialog类
setGravity(); 对齐方式
setContentView(); 显示内容
set Attributes();设置属性
setCanceledOnTouchOutside(true);点击外部消失
Dialog简单使用
1.普通对话框
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//构造者
builder.setIcon(R.drawable.ic_launcher_background);
//设置属性
builder.setTitle("标题");
builder.setMessage("信息");
//设置确定按钮
builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(normal_dialog.this, "您点击了OK", Toast.LENGTH_SHORT).show();
}
});
//设置取消按钮
builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(normal_dialog.this, "您点击了cancel", Toast.LENGTH_SHORT).show();
}
});
//使用建造者创建对象
AlertDialog alertDialog = builder.create();
//显示
alertDialog.show();
2.单选对话框
//构造者
final AlertDialog.Builder builder=new AlertDialog.Builder(this);
//TODO 2:设置属性
builder.setIcon(R.drawable.ic_launcher_background);//设置图标
builder.setTitle("您的性别是");//设置标题
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(normal_dialog.this, "您点击了取消", Toast.LENGTH_SHORT).show();
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
final String[] item = {"男","女"};
//设置单选列表
//参数1 列表 参数2 默认选中下标 参数3 事件监听
builder.setSingleChoiceItems(item, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(normal_dialog.this, "您选择了"+item[which], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show()
3.多选框
final String[] item = {"小明","大明","小花"};
final boolean[] flags = {true,true,true,false};
//构造者
final AlertDialog.Builder builder=new AlertDialog.Builder(this);
//设置属性
builder.setIcon(R.drawable.ic_launcher_background);//设置图标
builder.setTitle("您的好朋友是");//设置标题
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
for (int i = 0; i < flags.length; i++) {
if(flags[i]){
Toast.makeText(normal_dialog.this, ""+item[i], Toast.LENGTH_SHORT).show();
}
}
}
});
//设置多选列表
//参数一 列表 参数二 默认选中下表 参数三 事件监听
builder.setMultiChoiceItems(item, flags, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
flags[which]=isChecked;
}
});
//使用建造者创建对话框
AlertDialog alertDialog = builder.create();
//显示
alertDialog.show();
4.自定义对话框
自定义布局
<?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"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="picture"
android:textSize="30dp"/>
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:id="@+id/image1"
android:background="@drawable/ic_launcher_background" />
</LinearLayout>
java代码
AlertDialog.Builder builder = new AlertDialog.Builder(this);
setContentView(R.layout.activity_normal_dialog);
final View view = LayoutInflater.from(this).inflate(R.layout.item, null);
ImageView imageView = view.findViewById(R.id.image1);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(normal_dialog.this, "您点击了图片", Toast.LENGTH_SHORT).show();
}
});
builder.setView(view);
final AlertDialog alertDialog = builder.create();
alertDialog.show();
5.水平进度条对话框
//构造者
final ProgressDialog dialog = new ProgressDialog(this);
//设置属性
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置水平央视
dialog.setMax(100);
dialog.setMessage("正在下载");
//显示
dialog.show();
//模拟定位器
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
int progress=0;
@Override
public void run() {
if (progress==100){
dialog.dismiss();
timer.cancel();
}
dialog.setProgress(progress+=20);
}
},0,1000);//0秒后执行,每隔1000毫秒执行一次
6.圆形进度条对话框
//实例化对象
final ProgressDialog dialog = new ProgressDialog(this);
//设置属性
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dialog.setMax(200);
dialog.setMessage("正在下载");
//显示
dialog.show();
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
int progress = 0;
@Override
public void run() {
if (progress==100){
dialog.dismiss();//消失
timer.cancel();
}
dialog.setProgress(progress+=20);
}
},0,1000);
7.日期对话框
final Calendar calendar = Calendar.getInstance();//日历对象
new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
Toast.makeText(normal_dialog.this, year+"-"+month+"-"+dayOfMonth, Toast.LENGTH_SHORT).show();
}
},calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)).show();
8. 时间对话框
/**
* context 上下文
* listener 监听器
* hourofDay 小时
* minute 默认的分钟
* is24HourView 是否才用24小时
*
*/
final Calendar calendar = Calendar.getInstance();//日历对象
new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Toast.makeText(normal_dialog.this, hourOfDay+":"+minute, Toast.LENGTH_SHORT).show();
}
},calendar.get(Calendar.HOUR),calendar.get(Calendar.MINUTE),true).show();
二、自定义对话框
思路
1.重写interface
2.自定义类继承Dialog
3.重写Dialog的方法并添加需要的功能
4.在Activity中实例化自定义类的对象
1.重写interface
public interface MyLiserten {
void yes();
void no();
}
2.自定义类继承Dialog
3.重写Dialog的方法并添加需要的功能
public class normal_dialog extends Dialog{
private Button yes ;//确定按钮
private Button no;//取消按钮
private String yes_text;//确定按钮的文字
private String no_text;//取消按钮的文字
MyLiserten myLiserten;
public normal_dialog(Context context) {
super(context);
}
public normal_dialog(Context context, int themeResId) {
super(context, themeResId);
}
protected normal_dialog(Context context, boolean cancelable,DialogInterface.OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
}
public void setYes_text(String yes_text) {
this.yes_text = yes_text;
}
public void setNo_text(String no_text) {
this.no_text = no_text;
}
public void setMyLiserten(MyLiserten myLiserten) {
this.myLiserten = myLiserten;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);////去除标题,在setContentView之前调用,否则报错
setContentView(R.layout.item);
yes = findViewById(R.id.yes);
no = findViewById(R.id.no);
yes.setText(yes_text);
no.setText(no_text);
yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myLiserten.yes();
}
});
no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myLiserten.no();
}
});
}
}
主线程代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final normal_dialog normal_dialog = new normal_dialog(this);
normal_dialog.setNo_text("取消");
normal_dialog.setYes_text("确认");
normal_dialog.setMyLiserten(new MyLiserten() {
@Override
public void yes() {
normal_dialog.dismiss();
}
@Override
public void no() {
Toast.makeText(MainActivity.this, "您点击了取消", Toast.LENGTH_SHORT).show();
}
});
normal_dialog.show();
}
}