android 时间选择器demo

这几天写了一个类似日程的项目,看到小米的日程里面的时间选择器挺好看的,想要简单模仿一下。奈何能力有限,没有写成想象中那么完美,但是还好没让自己太失望,做成了一个还算能用的时间选择器。

一、下面就是我做的时间选择器的相关界面,这个时间选择器实现起来是很简单的:

二、会用到的layout和style

1、style里面的代码:(先打开下图文件,再把代码复制到里面)

    <!-- 标题栏的样式-->
    <style name="MyNavigationBarStyle1">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">48dp</item>
        <item name="android:layout_alignParentTop">true</item>
        <item name="android:background">@color/light_blue_800</item>
    </style>

2、新建lauout_30dp

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="30dp">

</RelativeLayout>

 

三、下面就是实现的相关代码了:

1、layout代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <RelativeLayout
                android:id="@+id/richeng_relative"
                style="@style/MyNavigationBarStyle1">
                <TextView
                    android:id="@+id/richeng_title_text"
                    android:layout_weight="20"
                    android:layout_centerVertical="true"
                    android:layout_centerHorizontal="true"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="新建活动"
                    android:gravity="center"
                    android:textSize="25dp"/>
            </RelativeLayout>
            <include
                layout="@layout/layout_30dp"
                ></include>
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/richeng_textview2"
                android:background="#e3eeff"
                android:hint="在此填写活动名称"
                android:textSize="30dp"
                android:layout_alignParentStart="true"
                />

            <RelativeLayout
                android:layout_marginTop="53dp"
                android:background="#e3eeff"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <LinearLayout
                    android:id="@+id/lin1"
                    android:layout_width="match_parent"
                    android:layout_height="48dp"
                    android:orientation="horizontal">
                    <TextView
                        android:layout_width="120dp"
                        android:layout_height="match_parent"
                        android:id="@+id/richeng_textview3"
                        android:text="开始时间"
                        android:textSize="30dp"
                         />
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:gravity = "right|center"
                        android:id="@+id/start"/>

                </LinearLayout>

                <LinearLayout
                    android:id="@+id/lin2"
                    android:layout_below="@+id/lin1"
                    android:layout_width="match_parent"
                    android:layout_height="48dp"
                    android:orientation="horizontal">
                    <TextView
                        android:layout_width="120dp"
                        android:layout_height="match_parent"
                        android:id="@+id/richeng_textview4"
                        android:text="结束时间"
                        android:textSize="30dp" />
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:gravity = "right|center"
                        android:id="@+id/end"/>
                </LinearLayout>

            </RelativeLayout>


            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/button5"
                android:text="确定"
                android:textSize="30dp"
                android:layout_marginTop="26dp" />
        </LinearLayout>

</LinearLayout>

2、对应的java代码:

public class enSchedule extends AppCompatActivity implements View.OnClickListener{

    private TextView textview3,textview4,start,end;
    private TimePickerView pvTime, pvCustomTime, pvCustomLunar;
    private int i ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.en_richeng);

        initTimePicker();
        textview3 = (TextView)findViewById(R.id.richeng_textview3);
        textview4 = (TextView)findViewById(R.id.richeng_textview4);
        start = (TextView)findViewById(R.id.start);
        end = (TextView)findViewById(R.id.end);

        textview3.setOnClickListener(this);
        textview4.setOnClickListener(this);
 }

        @Override
        public void onClick(View v) {
            if (v.getId() == R.id.richeng_textview3 && pvTime != null) {
                pvTime.show(v);//弹出时间选择器,传递参数过去,回调的时候则可以绑定此view
                i = 0;
            }else if(v.getId() == R.id.richeng_textview4){
                pvTime.show(v);
                i = 1;
            }
}

        private void initTimePicker() {//Dialog 模式下,在底部弹出
            pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
                @Override
                public void onTimeSelect(Date date, View v) {
                    if(i == 0){
                        String mStartTime = getTime(date);
                        start.setText(mStartTime);
                    }else if(i == 1){
                        String mEndTime = getTime(date);
                        end.setText(mEndTime);
                    }
                }
            })
                    .setTimeSelectChangeListener(new OnTimeSelectChangeListener() {
                        @Override
                        public void onTimeSelectChanged(Date date) {
                            Log.i("pvTime", "onTimeSelectChanged");
                        }
                    })
//dialog的格式设置
                    .setType(new boolean[]{true, true, true, true, true, false})
//这里的数组是可以自己定义的,每一位表示的分别是年,月,日,时,分,秒,我现在的设置是没有显示秒
                    .isDialog(true) //默认设置false ,内部实现将DecorView 作为它的父控件。
                    .build();
            Dialog mDialog = pvTime.getDialog();
            if (mDialog != null) {
                FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                        ViewGroup.LayoutParams.MATCH_PARENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT,
                        Gravity.BOTTOM);
                params.leftMargin = 0;
                params.rightMargin = 0;
                pvTime.getDialogContainerLayout().setLayoutParams(params);
                Window dialogWindow = mDialog.getWindow();
                if (dialogWindow != null) {
                    dialogWindow.setWindowAnimations(com.bigkoo.pickerview.R.style.picker_view_slide_anim);//修改动画样式
                    dialogWindow.setGravity(Gravity.BOTTOM);//改成Bottom,底部显示
                }
            }
        }

    private String getTime(Date date) {//可根据需要自行截取数据显示
        Log.d("getTime()", "choice date millis: " + date.getTime());
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        return format.format(date);
    }
}

这样就完成了时间选择器的显示,可以运行到虚拟机或者真机上测试了。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值