目录
TimePickerDialog
概述
时间选择对话框,继承DialogFragment
重写onCreateDialog()方法 返回一个TimePickerDialog对象
实现TimePickerDialog的OnTimeSetListener接口来收回一个回调(当用户设置时间)
具体实现
1.首先创建一个新的类,
这个类的目的就是为了显示时间对话框。
2.继承DialogFragment,
(即DialogFragment对话框)
发现有两个可以选择,如果版本比较高可以选择下面的,反之选上面的。
3.导入实现方法
4.重写onCreateDialog()方法
完成了,时间对话框完成按钮的事件
具体代码如下:
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
//获取当前系统时间
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
//参数1上下文 参数2回调事件 参数3小时 参数4分钟 参数5 是否是24小时制度
TimePickerDialog dialog = new TimePickerDialog(getActivity(),this,hour,minute,true);
return dialog;
}
5.onTimeSet
hour和minute定义在外部比较好...
所以.....
TimePickerFragment类完整代码如下
package com.example.time;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.widget.TimePicker;
import java.util.Calendar;
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
int hour;
int minute;
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
//获取当前系统时间
Calendar c = Calendar.getInstance();
hour = c.get(Calendar.HOUR_OF_DAY);
minute = c.get(Calendar.MINUTE);
//参数1上下文 参数2回调事件 参数3小时 参数4分钟 参数5 是否是24小时制度
TimePickerDialog dialog = new TimePickerDialog(getActivity(),this,hour,minute,true);
return dialog;
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
this.hour = hourOfDay;
this.minute = minute;
}
}
6.修改activity_main.xml
加一个按钮和textview
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="3dp"
android:text="Not Time"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="357dp"
android:text="设置时间"
android:onClick="setTimeClick"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
</android.support.constraint.ConstraintLayout>
7.修改MainActivity
package com.example.time;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
}
public void setTimeClick(View v){
DialogFragment timePickerFragment = new TimePickerFragment();
timePickerFragment.show(getSupportFragmentManager(),"timerPicker");
//getFragmentManager() 用不了。。。
}
public void setTextValue(int hour,int minute){
textView.setText(hour+":"+minute);
}
}
为了让TimePickerFragment能使用到setTextValue,还需要对TimePickerFragment类进行一定的修改,如下。
package com.example.time;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.widget.TimePicker;
import java.util.Calendar;
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
int hour;
int minute;
private MainActivity mainActivity;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
mainActivity = (MainActivity)getActivity();
super.onCreate(savedInstanceState);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
//获取当前系统时间
Calendar c = Calendar.getInstance();
hour = c.get(Calendar.HOUR_OF_DAY);
minute = c.get(Calendar.MINUTE);
//参数1上下文 参数2回调事件 参数3小时 参数4分钟 参数5 是否是24小时制度
TimePickerDialog dialog = new TimePickerDialog(getActivity(),this,hour,minute,true);
return dialog;
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
this.hour = hourOfDay;
this.minute = minute;
mainActivity.setTextValue(hour,minute);
}
}
效果
点击设置时间按钮
点击OK
DatePickerDialog
然后过程其实和上面的是一样的,所以下面描述会比较简略,过程也有所精简,主要放代码。
实现
1.重新创建一个MainActivity
当然你也可以重新建个项目 ← ←
然后把这个作为启动的activity
2.activity_main2.xml的配置
和上面类似的,不赘述了
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Main2Activity">
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="3dp"
android:text="Not Date"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="357dp"
android:text="设置日期"
android:onClick="setDateClick"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
</android.support.constraint.ConstraintLayout>
3.Main2Activity的配置
package com.example.time;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class Main2Activity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
textView = findViewById(R.id.textView);
}
public void setDateValue(int year,int month,int day){
textView.setText(year+"年"+(month+1+"月"+day));
//注意月份要+1
}
//设置日期的按钮事件
public void setDateClick(View view){
DialogFragment dialogFragment = new DatePickerFragment();
dialogFragment.show(getSupportFragmentManager(),"datePicker");
}
}
4.DatePickerFragment的配置
也与上面的类似,继承并重写对应方法
extends DialogFragment implements DatePickerDialog.OnMultiChoiceClickListener
就是原来是获取时分 现在是获取 年月日
package com.example.time;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.widget.DatePicker;
import java.util.Calendar;
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
private Main2Activity main2Activity;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
main2Activity = (Main2Activity)getActivity();
super.onCreate(savedInstanceState);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(getActivity(),this,year,month,day);
return dialog;
}
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
main2Activity.setDateValue(year,month,dayOfMonth);
}
}
效果
TimePicker和DatePicker
概述
这两个是日期和时间的显示控件,效果如图,与上面的区别是,不是以对话框的形式出现的,而是直接出现的。
demo
加了一堆奇怪的束缚,无视————主要就是和名字一样 一个是<DatePicker/>一个是<TimePicker/>
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Main3Activity">
<DatePicker
android:id="@+id/dpPicker"
android:layout_width="235dp"
android:layout_height="0dp"
android:layout_marginStart="15dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="40dp"
android:layout_marginBottom="11dp"
android:calendarViewShown="false"
app:layout_constraintBottom_toTopOf="@+id/tpPicker"
app:layout_constraintStart_toEndOf="@+id/button2"
app:layout_constraintTop_toTopOf="parent" />
<TimePicker
android:id="@+id/tpPicker"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginEnd="66dp"
android:layout_marginRight="66dp"
android:layout_marginBottom="85dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/button2"
app:layout_constraintTop_toBottomOf="@+id/dpPicker" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="293dp"
android:layout_marginEnd="28dp"
android:layout_marginRight="28dp"
android:layout_marginBottom="305dp"
android:onClick="save"
android:text="Button"
app:layout_constraintBottom_toBottomOf="@+id/tpPicker"
app:layout_constraintEnd_toStartOf="@+id/tpPicker"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
package com.example.time;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TimePicker;
import android.widget.Toast;
public class Main3Activity extends AppCompatActivity {
private TimePicker timePicker;
private DatePicker datePicker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
timePicker = findViewById(R.id.tpPicker);
datePicker = findViewById(R.id.dpPicker);
}
public void save(View view){
int hour = timePicker.getCurrentHour();
int minute = timePicker.getCurrentMinute();
int year = datePicker.getYear();
int month = datePicker.getMonth();
int day = datePicker.getDayOfMonth();
Toast.makeText(this,year+"年"+month+"月"+day+"日"+hour+"点"+minute+"分",Toast.LENGTH_LONG).show();
}
}
简单的加个按钮 加个onclick事件绑定一个save方法,然后在MainActivity写个save方法测试一下timerPicker和datePicker的一些get方法