我们大家都知道对话框的重要性。就比如下载时,就会弹出对话框告知用户下载进度。不然的话,用户就不知道。这样的应用显然吸引不住用户。用户看到半天没反应,肯定会卸载。所以。。。对话框的学习还是有必要的。哈哈哈。。。。
对话框的几个重要方法:
- setTitle(String title);//设置标题
- setIcon(int icon);//设置图标
- setPositiveButton(String text,DialogInterface.OnClickListener listener);//添加按钮,
- setNegativeButton(String text,DialogInterface.OnClickListener listener);//添加按钮
- setMessage(String content);//对话框里的内容
- setCancelable(boolean flag)//false 代表的是不能通过点击外面的地方关闭对话框。默认是true。
- show()//必须调用的方法,不然不会显示出来
1.简单的对话框
每次讲代码时,首先先看运行结果,我们程序猿就是这样。哈哈
activity_main.xml布局文件,是不是很简单。
<?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"
>
<Button
android:id="@+id/id_commen"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="普通对话框" />
</LinearLayout>
接下来我们就编写我们的代码。
MainAcitivity.java代码
public class MainActivity extends AppCompatActivity {
private Button mBtn_com;
private AlertDialog.Builder mDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initWidgets();//初始化控件
//普通按钮点击事件
mBtn_com.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDialog = new AlertDialog.Builder(MainActivity.this);
mDialog.setTitle("this is title");//设置标题
mDialog.setIcon(R.mipmap.ic_launcher);//设置图标
mDialog.setMessage("this is a content");//对话框里的内容
mDialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你点击了取消按钮", Toast.LENGTH_SHORT).show();
}
});
mDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你点击了确定按钮", Toast.LENGTH_SHORT).show();
}
});
mDialog.setCancelable(false);
mDialog.show();//此方法是显示对话框
}
});
}
//初始化控件
private void initWidgets() {
mBtn_com = (Button) findViewById(R.id.id_commen);
}
是不是很简单,哈哈,接下来我们接着学习 有进度的对话框。。
在我们刚才写的activity_main.xml布局文件在添加一个按钮,添加的内容为:
<Button
android:id="@+id/id_progress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="进度条对话框" />
在我们的 MainAcitivity.java代码添加以下代码。这里运到了handler知识。因为子线程不能更改UI,
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0x123) {
Toast.makeText(MainActivity.this, "下载完成", Toast.LENGTH_SHORT).show();
}
}
};
//为进度条按钮添加点击事件
mBtn_progress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setIcon(R.mipmap.ic_launcher);
mProgressDialog.setTitle("this is a title");
mProgressDialog.setMessage("this is a content");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//水平的进度条
// mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//环形进度条
new Thread() {
@Override
public void run() {
super.run();
for (int i = 0; i < 100; i++) {
mProgressDialog.setProgress(i);
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
mProgressDialog.dismiss();
handler.sendEmptyMessage(0x123);
}
}.start();
mProgressDialog.setCancelable(false);
mProgressDialog.show();
}
});
别忘了在initWidgets()初始化该ProgressDialog对象,还有在开始时声明它
写完后就赶快运行。哈哈。
到现在我们已经学完两种对话框了。不要停。我赶紧学习第三种对话框TimePickerDialog 时间对话框。。activity_main.xml布局文件在加个按钮。代码如下:
activity_main.xml代码下添加
<Button
android:id="@+id/id_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="时间对话框" />
MainAcitivity.java添加一下代码
//时间按钮添加点击事件
mBtn_time.setOnClickListener(new View.OnClickListener() {
Calendar clc=Calendar.getInstance();//获取日历对象
int HOUR= clc.get(Calendar.HOUR_OF_DAY);//获取当前的时
int MINTUE=clc.get(Calendar.MINUTE);//获取当前的分
@Override
public void onClick(View v) {
mTimeDialog=new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Toast.makeText(MainActivity.this,"你选的时间为:"+hourOfDay+":"+minute,Toast.LENGTH_SHORT).show();
}
},HOUR,MINTUE,true);
mTimeDialog.setCancelable(false);
mTimeDialog.show();
}
});
别忘了在initWidgets()初始化该TimePickerDialog对象,还有在开始时声明它
运行效果
学到这里。我们已经了解了三种对话框。其实对话框的写法都差不多。接下来再学习一种对话框。日期对话框。
activity_main.xml代码下添加
<Button
android:id="@+id/id_date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="日期对话框" />
MainAcitivity.java添加一下代码
//为日期按钮添加点击事件
mBtn_date.setOnClickListener(new View.OnClickListener() {
Calendar clc=Calendar.getInstance();//获取日历对象
int YEAR=clc.get(Calendar.YEAR);//获取当前年份
int MONTH=clc.get(Calendar.MONTH);//获取当前的月份
int DAY=clc.get(Calendar.DAY_OF_MONTH);//获取当前的天
@Override
public void onClick(View v) {
mDateDialog=new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Toast.makeText(MainActivity.this,"你选的日期为:"+year+"-"+(monthOfYear+1)+"-"+dayOfMonth,Toast.LENGTH_SHORT).show();
}
},YEAR,MONTH,DAY);
mDateDialog.setCancelable(false);
mDateDialog.show();
}
});
(monthOfYear+1)加1的原因是我们获取的不是我们当前的月。外国人计算方式跟我们不一样。要加1才是。别忘了在initWidgets()初始化该TimePickerDialog对象,还有在开始时声明它
运行效果
总结
我们已经学完四种常用的对话框。其实还有几种对话框。实现方法大概都差不多。掌握了这几种对话框,我想其他的对话框,我们学习起来也是一如反掌 ,哈哈哈。。。。
其实我也是个自学者。。。加油!!!
源码下载
https://github.com/songshuilin/AndroidForBlog 欢迎大家fork star 一起加油!!!