案例:
要求,只能选择从当前时间往后的日期。
图片.png
1、使用
布局
<com.hjq.shape.layout.ShapeRelativeLayout
android:id="@+id/srl_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<com.hjq.shape.view.ShapeTextView
android:id="@+id/stv_date_1"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_centerVertical="true"
android:layout_marginTop="10dp"
android:gravity="center"
android:paddingHorizontal="20dp"
android:text="年/月/日"
app:shape_radius="15dp"
app:shape_solidColor="@color/houseCondition" />
<View
android:id="@+id/v_line"
android:layout_width="17dp"
android:layout_height="1dp"
android:layout_centerVertical="true"
android:layout_marginHorizontal="2dp"
android:layout_marginTop="10dp"
android:layout_toRightOf="@+id/stv_date_1"
android:background="@color/btnColor" />
<com.hjq.shape.view.ShapeTextView
android:id="@+id/stv_date_2"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_centerVertical="true"
android:layout_marginTop="10dp"
android:layout_toRightOf="@id/v_line"
android:gravity="center"
android:paddingHorizontal="20dp"
android:text="年/月/日"
app:shape_radius="15dp"
app:shape_solidColor="@color/houseCondition" />
</com.hjq.shape.layout.ShapeRelativeLayout>
在activity中
//找到布局的控件
@BindView(R.id.stv_date_1)
lateinit var stvDate1: ShapeTextView
@BindView(R.id.stv_date_2)
lateinit var stvDate2: ShapeTextView
//装修 -> 入住日期(存储为Date类型是为了把该日期传回给后端,后端的接收类型为Date)
private var renovationDate : Date? = null
private var checkInDate : Date? = null
@OnClick(R.id.stv_date_1)
fun checkStart() {
//获取日历的一个实例,里面包含了当前的年月日
val calendar: Calendar = Calendar.getInstance()
//构建一个日期对话框,该对话框已经集成了日期选择器
//DatePickerDialog的第二个构造参数指定了日期监听器
val dialog = DatePickerDialog(
this, object : DatePickerDialog.OnDateSetListener {
override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
val desc = String.format(
"%d年%d月%d日",
year,
month + 1,
dayOfMonth
)
stvDate1.setText(desc) //选择的日期显示在textView中
var date = SimpleDateFormat("yyyy年MM月dd日")
var subDate = date.parse(desc)
renovationDate = subDate
}
},
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH)
)
var dp = dialog.datePicker
dp.minDate = Date().time
//把日期对话框显示在界面上
dialog.show()
}
@OnClick(R.id.stv_date_2)
fun checkEnd() {
//获取日历的一个实例,里面包含了当前的年月日
val calendar: Calendar = Calendar.getInstance()
//构建一个日期对话框,该对话框已经集成了日期选择器
//DatePickerDialog的第二个构造参数指定了日期监听器
val dialog = DatePickerDialog(
this, object : DatePickerDialog.OnDateSetListener {
override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
val desc = String.format(
"%d年%d月%d日",
year,
month + 1,
dayOfMonth
)
stvDate2.setText(desc) //选择的日期显示在textView中
var date = SimpleDateFormat("yyyy年MM月dd日")
var subDate = date.parse(desc)
checkInDate = subDate
}
},
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH)
)
var dp = dialog.datePicker
//设置日期选择器能选择的最小日期,从当前日期开始选择。
dp.minDate = Date().time
//把日期对话框显示在界面上
dialog.show()
}
2、注意事项
回传使用rxhttp、fastJson,先把数据封装到一个json数据格式中,此时fastJson的Date类型解析不能使用默认的解析方式,应该使用与后端解析保持一致,比如这里地方"yyyy-MM-dd"。所以这里修改了fastJson的解析格式,在代码的第二行可以看到,这是一个坑。
//量身营造提交请求
fun requestSubmit(madeOrderParam : MadeOrderParam) {
JSONObject.DEFFAULT_DATE_FORMAT="yyyy-MM-dd" //设置日期格式
val `object`: JSONObject = JSONObject()
`object`["housePlanId"] = madeOrderParam.housePlanId
`object`["deviseInfo"] = madeOrderParam.deviseInfo
//rxhttp获取后台数据
RxHttp.postJson(Constant.CUSTOM_ORDER)
.addHeader(Constant.TOKEN, AppSharedPreferences.getInstance(me).token)
.addAll(`object`.toJSONString())
.asClass(Response::class.java)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ a ->
if(a.isSuccess){
Log.e("量身营造设计需求提交调试", "量身营造设计需求提交是否成功:" + a.isSuccess + "状态码:" + a.status)
val toast = Toast.makeText(this, "设计需求提交成功", Toast.LENGTH_SHORT)
toast.setGravity(Gravity.CENTER, 0, 0)
toast.show()
Log.e("设计需求提交调试","housePlanId->${madeOrderParam.housePlanId}")
Log.e("设计需求提交调试","deviseInfo->${madeOrderParam.deviseInfo}")
}else{
Log.e("量身营造设计需求提交调试", "量身营造设计需求提交是否成功:" + a.isSuccess + "状态码:" + a.status + "msg" + a.msg)
val toast = Toast.makeText(this, "设计需求提交失败" , Toast.LENGTH_SHORT)
toast.setGravity(Gravity.CENTER, 0, 0)
toast.show()
}
}, { throwable ->
Log.e("量身营造设计需求提交调试", "error:" + throwable)
val toast = Toast.makeText(this, "量身营造设计需求提交失败", Toast.LENGTH_SHORT)
toast.setGravity(Gravity.CENTER, 0, 0)
toast.show()
})
}
网友评论