detail: 自定义的选择器 时间日期,支持多种可扩展特性
ps:需要lib,请自己去找
step1:
package com.example.demoanalytic;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.bigkoo.pickerview.builder.TimePickerBuilder;
import com.bigkoo.pickerview.listener.CustomListener;
import com.bigkoo.pickerview.listener.OnTimeSelectListener;
import com.bigkoo.pickerview.view.TimePickerView;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* author : zhangzf
* date : 2020/11/28
* desc :
*/
public class HomeActivity extends AppCompatActivity {
private TimePickerView pvTime;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn_main = findViewById(R.id.btn_main);
btn_main.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
initTimePicker();
}
});
}
private void initTimePicker() {
Date curDate = new Date(System.currentTimeMillis());
SimpleDateFormat formatter_mouth = new SimpleDateFormat("MM ");
String mouth_str = formatter_mouth.format(curDate);
int mouth_int = (int) Double.parseDouble(mouth_str);
SimpleDateFormat formatter_day = new SimpleDateFormat("dd ");
String day_str = formatter_day.format(curDate);
int day_int = (int) Double.parseDouble(day_str);
// Calendar selectedDate = Calendar.getInstance();//系统当前时间
Calendar startDate = Calendar.getInstance();
startDate.set(2014, 0, 1);
Calendar endDate = Calendar.getInstance();
endDate.set(2027, 11, 31);
Calendar selectedDate = Calendar.getInstance();//系统当前时间
selectedDate.set(Calendar.MINUTE, 1);
selectedDate.set(Calendar.HOUR_OF_DAY, 1);
//时间选择器
pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {
String data = DateUtil.covert(date.getTime(), DateUtil.TIME);
if (data == "00:00") {
return;
}
Log.e("TAG", "时间选择器:"+data);
}
})
.setLayoutRes(R.layout.pickerview_mindor_time, new CustomListener() {
@Override
public void customLayout(View v) {
Button btnCancel = v.findViewById(R.id.btnCancel);
Button btnSubmit = v.findViewById(R.id.btnSubmit);
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvTime.dismiss();
}
});
btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvTime.returnData();
pvTime.dismiss();
}
});
}
})
.setType(new boolean[]{false, false, false, true, true, false}) //年月日时分秒 的显示与否,不设置则默认全部显示
.setLabel("", "月", "日", "时", "分", "秒")//默认设置为年月日时分秒
.isCenterLabel(false)
.setTitleColor(Color.parseColor("#333333"))//标题文字颜色
.setSubmitColor(Color.parseColor("#FF3B30"))//确定按钮文字颜色
.setCancelColor(Color.parseColor("#777777"))//取消按钮文字颜色
.setTitleBgColor(Color.parseColor("#ffffff"))//标题背景颜色 Night mode
.setTextColorCenter(Color.parseColor("#0091FF"))
.setSubCalSize(24)
.setContentTextSize(32)//滚轮文字大小
.setTitleSize(24)//标题文字大小
.setSubmitText("确定")
.setCancelText("取消")
.setDate(selectedDate)
.isCyclic(false)//是否循环滚动
.setLineSpacingMultiplier(1.5f)
.setTextXOffset(0, 0, 0, 0, 0, 0)//设置X轴倾斜角度[ -90 , 90°]
.setRangDate(startDate, endDate)
.setDecorView(null)
.build();
pvTime.show();
}
}
step2:
package com.example.demoanalytic
import android.graphics.Color
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*
import com.bigkoo.pickerview.builder.TimePickerBuilder
import com.bigkoo.pickerview.listener.CustomListener
import com.bigkoo.pickerview.listener.OnTimeSelectListener
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_main.setOnClickListener {
setClock()
}
}
private fun setClock() {
val selectedDate = Calendar.getInstance()
selectedDate.set(Calendar.MINUTE, 1)
selectedDate.set(Calendar.HOUR_OF_DAY, 1)
val pvTimeStart = TimePickerBuilder(this, OnTimeSelectListener { date, v ->
val startTime = DateUtil.covert(date.time, DateUtil.TIME)
if (startTime == "00:00") {
return@OnTimeSelectListener
}
println("postTiming")
// postTiming(timming, startTime)
}).setLayoutRes(R.layout.pickerview_mindor_time, object : CustomListener {
override fun customLayout(v: View) {
v.findViewById<TextView>(R.id.tvTitle).text = "倒计时关"
v.findViewById<Button>(R.id.btnSubmit).text = "保存"
v.findViewById<Button>(R.id.btnCancel).text = "关闭倒计时"
v.findViewById<Button>(R.id.btnCancel).setOnClickListener {
println("btnCancel")
}
v.findViewById<Button>(R.id.btnSubmit).setOnClickListener {
println("btnSubmit")
}
}
})
.setType(booleanArrayOf(false, false, false, true, true, false))// 默认全部显示
.setCancelText(getString(R.string.app_name))//取消按钮文字
.setSubmitText(getString(R.string.app_name))//确认按钮文字
.setSubCalSize(24)
.setContentTextSize(32)//滚轮文字大小
.setTitleSize(24)//标题文字大小
.setTitleText(getString(R.string.app_name))//标题文字
.setOutSideCancelable(false)//点击屏幕,点在控件外部范围时,是否取消显示
.isCyclic(false)//是否循环滚动
.setTitleColor(Color.parseColor("#333333"))//标题文字颜色
.setSubmitColor(Color.parseColor("#FF3B30"))//确定按钮文字颜色
.setCancelColor(Color.parseColor("#777777"))//取消按钮文字颜色
.setTitleBgColor(Color.parseColor("#ffffff"))//标题背景颜色 Night mode
.setTextColorCenter(Color.parseColor("#0091FF"))
.setBgColor(Color.WHITE)//滚轮背景颜色 Night mode
.setDate(selectedDate)// 如果不设置的话,默认是系统时间*/
.setLineSpacingMultiplier(1.5f)
.setDividerColor(Color.TRANSPARENT)
.setLabel("", "月", "日", "时", "分", "秒")//默认设置为年月日时分秒
.isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
.isDialog(false)//是否显示为对话框样式
.setOutSideCancelable(true)
.build()
pvTimeStart?.show()
}
}
step3:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_time_bg"
android:orientation="vertical">
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:gravity="center"
android:text="开启时间"
android:textColor="#000000"
android:textSize="24dp" />
<LinearLayout
android:id="@+id/timepicker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:background="@android:color/white"
android:orientation="horizontal">
<com.contrarywind.view.WheelView
android:id="@+id/year"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.96" />
<com.contrarywind.view.WheelView
android:id="@+id/month"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<com.contrarywind.view.WheelView
android:id="@+id/day"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<com.contrarywind.view.WheelView
android:id="@+id/hour"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<com.contrarywind.view.WheelView
android:id="@+id/min"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<com.contrarywind.view.WheelView
android:id="@+id/second"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<RelativeLayout
android:id="@+id/rv_topbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="34dp"
android:layout_marginBottom="34dp"
android:background="@android:color/white">
<Button
android:id="@+id/btnCancel"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="138dp"
android:layout_height="44dp"
android:layout_marginLeft="36dp"
android:background="@drawable/shape_time_pop"
android:gravity="center"
android:text="取消"
android:textColor="#000000"
android:textSize="20dp" />
<Button
android:id="@id/btnSubmit"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="138dp"
android:layout_height="44dp"
android:layout_alignParentRight="true"
android:layout_marginRight="36dp"
android:background="@drawable/selector_btn_common"
android:gravity="center"
android:text="保存"
android:textColor="@drawable/selector_common_btn_text"
android:textSize="20dp" />
</RelativeLayout>
</LinearLayout>
end