从零开始水安卓——基础UI组件10(日期和时间)

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方法

猜你喜欢

转载自blog.csdn.net/nishigesb123/article/details/88605588