这几天写了一个类似日程的项目,看到小米的日程里面的时间选择器挺好看的,想要简单模仿一下。奈何能力有限,没有写成想象中那么完美,但是还好没让自己太失望,做成了一个还算能用的时间选择器。
一、下面就是我做的时间选择器的相关界面,这个时间选择器实现起来是很简单的:
二、会用到的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);
}
}
这样就完成了时间选择器的显示,可以运行到虚拟机或者真机上测试了。