进度条对话框、日期选择对话框和时间选择对话框——Android
目的:实现常用的三种对话框——进度条、日期选择、时间选择
开发工具:Android Studio3.3.2
实现过程:
- 第一步:在布局文件中添加三个Button用于打开三种不同类型的对话框,并将按钮设置为水平和竖直方向都居中,然后添加两个TextView用于显示用户选择的日期和时间
- 要让按钮在页面居中需要在父级元素添加 android:gravity="center"
- 如果希望按钮宽度自适应且在竖直方向排列,则需要在父级元素中添加android:orientation="vertical"
<?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="fill_parent" android:gravity="center" android:orientation="vertical"> <Button android:id="@+id/button1" android:layout_width="150dp" android:layout_height="wrap_content" android:layout_gravity="center" android:text="打开进度对话框" /> <Button android:id="@+id/button2" android:layout_width="150dp" android:layout_height="wrap_content" android:layout_gravity="center" android:text="打开日期对话框" /> <Button android:id="@+id/button3" android:layout_width="150dp" android:layout_height="wrap_content" android:layout_gravity="center" android:text="打开时间对话框" /> <TextView android:id="@+id/result_show" android:layout_marginTop="20dp" android:layout_height="wrap_content" android:layout_width="wrap_content" /> <TextView android:id="@+id/time_show" android:layout_marginTop="20dp" android:layout_height="wrap_content" android:layout_width="wrap_content" /> </LinearLayout>
- 第二步: 绑定点击事件
- 与用户界面程序中的组件建立关联,并注册三个按钮的监听器。
- 获取到系统当前的日期与时间
Button btn1,btn2,btn3; TextView result_show,time_show; int m_year,m_month,m_day,m_hour,m_minute; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.date_time_select); //与用户界面程序中的组件建立关联 btn1 = (Button) findViewById(R.id.button1); btn2 = (Button) findViewById(R.id.button2); btn3 = (Button) findViewById(R.id.button3); //获取系统的日期和时间 Calendar calendar = Calendar.getInstance(); m_year = calendar.get(Calendar.YEAR); m_month = calendar.get(Calendar.MONTH)+1; m_day = calendar.get(Calendar.DAY_OF_MONTH); m_hour = calendar.get(Calendar.HOUR_OF_DAY); m_minute = calendar.get(Calendar.MINUTE); //结果显示框 result_show = (TextView)findViewById(R.id.result_show); time_show = (TextView)findViewById(R.id.time_show); btn1.setOnClickListener(new mClick()); btn2.setOnClickListener(new mClick()); btn3.setOnClickListener(new mClick()); }
- 第三步: 处理点击事件,创建对应的对话框
- 当用户点击进度条按钮时:创建进度条对话框、设置标题和提示信息并设置进度的最大值
- 设置日期监听器:获取到用户选择的年、月、日并显示在TextView中
- 设置时间显示器:获取到用户选择的时、分并显示在TextView中
class mClick implements View.OnClickListener { @Override public void onClick(View v) { if(v==btn1){ ProgressDialog d = new ProgressDialog(MainActivity.this); d.setTitle("进度对话框"); d.setInverseBackgroundForced(true); d.setMessage("程序正在Loading···"); d.setCancelable(true); d.setMax(10); d.show(); }else if(v==btn2){ DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener(){ public void onDateSet(DatePicker view,int year,int monthOfYear,int dayOfMonth){ m_year = year; m_month = monthOfYear; m_day = dayOfMonth; result_show.setText("你选择了:"+m_year+"年"+m_month +"月" + m_day +"日"); } }; DatePickerDialog date = new DatePickerDialog(MainActivity.this,dateSetListener,m_year,m_month,m_day); date.setTitle("日期对话框"); date.show(); }else if(v==btn3){ TimePickerDialog.OnTimeSetListener timeSetListener = new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { m_hour = hourOfDay; m_minute = minute; time_show.setText("你选择了:"+m_hour+":" + m_minute); } }; TimePickerDialog d = new TimePickerDialog(MainActivity.this,timeSetListener,m_hour,m_minute,true); d.setTitle("时间对话框"); d.show(); }else{ //To do... } } }
——整个Java文件的代码如下
import android.app.DatePickerDialog; import android.app.ProgressDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.app.TimePickerDialog; import android.widget.DatePicker; import android.widget.TextView; import android.widget.TimePicker; import java.util.Calendar;public class MainActivity extends AppCompatActivity { Button btn1,btn2,btn3; TextView result_show,time_show; int m_year,m_month,m_day,m_hour,m_minute; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.date_time_select); //与用户界面程序中的组件建立关联 btn1 = (Button) findViewById(R.id.button1); btn2 = (Button) findViewById(R.id.button2); btn3 = (Button) findViewById(R.id.button3); //获取系统的日期 Calendar calendar = Calendar.getInstance(); m_year = calendar.get(Calendar.YEAR); m_month = calendar.get(Calendar.MONTH)+1; m_day = calendar.get(Calendar.DAY_OF_MONTH); m_hour = calendar.get(Calendar.HOUR_OF_DAY); m_minute = calendar.get(Calendar.MINUTE); //结果显示框 result_show = (TextView)findViewById(R.id.result_show); time_show = (TextView)findViewById(R.id.time_show); btn1.setOnClickListener(new mClick()); btn2.setOnClickListener(new mClick()); btn3.setOnClickListener(new mClick()); } class mClick implements View.OnClickListener { @Override public void onClick(View v) { if(v==btn1){ ProgressDialog d = new ProgressDialog(MainActivity.this); d.setTitle("进度对话框"); d.setInverseBackgroundForced(true); d.setMessage("程序正在Loading···"); d.setCancelable(true); d.setMax(10); d.show(); }else if(v==btn2){ DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener(){ public void onDateSet(DatePicker view,int year,int monthOfYear,int dayOfMonth){ m_year = year; m_month = monthOfYear; m_day = dayOfMonth; result_show.setText("你选择了:"+m_year+"年"+m_month +"月" + m_day +"日"); } }; DatePickerDialog date = new DatePickerDialog(MainActivity.this,dateSetListener,m_year,m_month,m_day); date.setTitle("日期对话框"); date.show(); }else if(v==btn3){ TimePickerDialog.OnTimeSetListener timeSetListener = new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { m_hour = hourOfDay; m_minute = minute; time_show.setText("你选择了:"+m_hour+":" + m_minute); } }; TimePickerDialog d = new TimePickerDialog(MainActivity.this,timeSetListener,m_hour,m_minute,true); d.setTitle("时间对话框"); d.show(); }else{ //To do... } } } }
——运行效果截图如下