Android-在时间选择器对话框中禁用(或隐藏)分钟选择

Android-在时间选择器对话框中禁用(或隐藏)分钟选择,android,timepicker,Android,Timepicker,在我的项目中,我使用时间选择器对话框允许用户选择时间。但我不想让他们选择分钟。因此,我只想禁用(或隐藏)分钟选择。 那么,如何做到这一点呢?简而言之,你不能。您必须创建自己的自定义对话框 很长一段时间的回答是,你可能可以,但你不应该。您可以找到视图的id并禁用或隐藏它,但是每个版本和制造商可能会使用不同的id来创建此对话框,因此您将遇到许多问题和bug 我通过使用解决了我的问题 我的解决方案: 公共类home扩展AppCompatActivity实现TimePickerDialog.OnTim


在我的项目中,我使用时间选择器对话框允许用户选择时间。但我不想让他们选择分钟。因此,我只想禁用(或隐藏)分钟选择。
那么,如何做到这一点呢?

简而言之,你不能。您必须创建自己的自定义对话框

很长一段时间的回答是,你可能可以,但你不应该。您可以找到视图的id并禁用或隐藏它,但是每个版本和制造商可能会使用不同的id来创建此对话框,因此您将遇到许多问题和bug


我通过使用解决了我的问题

我的解决方案:

公共类home扩展AppCompatActivity实现TimePickerDialog.OnTimeSetListener。。。{
...
私人编辑文本时间;
专用时间选择器Dialog时间选择器Dialog;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
...
timePickerDialog=timePickerDialog.newInstance(home.this,new Date().getHours(),new Date().getMinutes(),false);
timePickerDialog.enableMinutes(假);
时间=(EditText)findViewById(R.id.time);
time.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
show(getFragmentManager(),“timePickerDialog”);
}
});
}
@凌驾
时间集上的公共无效(时间选择器对话框视图、整数小时、整数分钟、整数秒){
字符串形式;
如果(小时/天>12){
hourOfDay=hourOfDay-12;
form=“PM”;
}否则{
如果(hourOfDay==0){
hourOfDay=12;
}
form=“AM”;
}
time.setText(String.valueOf(hourOfDay)+“”+表单);
}
...
}

没有库和简单的时间选择器

time_picker.setIs24HourView(true)
time_picker.currentMinute = 0
time_picker.currentHour = 0
time_picker.findViewById<View>(Resources.getSystem()
       .getIdentifier("hour", "id", "android"))
       .visibility = View.GONE
time\u picker.set为24小时视图(true)
time\u picker.currentMinute=0
time\u picker.currentHour=0
time\u picker.findViewById(Resources.getSystem())
.getIdentifier(“小时”、“id”、“android”))
.visibility=View.GONE

将id标识符更改为需要隐藏或显示的内容

这解决了我在本机时间选择器组件中的问题
1.禁用分钟选择
2.隐藏时间分隔符
3.当用户选择小时时,禁用从小时到分钟的转换

代码在kotlin中

// Disbale time picker minutes
time_picker.findViewById<View>(Resources.getSystem()
            .getIdentifier("minutes", "id", "android"))
            .visibility = View.GONE
// Disbale time seperator
time_picker.findViewById<View>(Resources.getSystem()
            .getIdentifier("separator", "id", "android"))
            .visibility = View.INVISIBLE

val delegateField = time_picker.javaClass.getDeclaredField("mDelegate")
delegateField.isAccessible = true;
val autoAdvance = delegateField.get(time_picker)
val autoAdvanceField = autoAdvance.javaClass.getDeclaredField("mAllowAutoAdvance")

autoAdvanceField.isAccessible = true
autoAdvanceField.set(autoAdvance, false)
//取消分配时间选择器分钟数
time\u picker.findViewById(Resources.getSystem())
.getIdentifier(“分钟”、“id”、“安卓”))
.visibility=View.GONE
//拆开分时器
time\u picker.findViewById(Resources.getSystem())
.getIdentifier(“分隔符”、“id”、“安卓”))
.visibility=View.INVISIBLE
val delegateField=time\u picker.javaClass.getDeclaredField(“mDelegate”)
delegateField.isAccessible=true;
val autoAdvance=delegateField.get(时间选择器)
val autoAdvanceField=autoAdvance.javaClass.getDeclaredField(“mAllowAutoAdvance”)
autoAdvanceField.isAccessible=真
autoAdvanceField.set(autoAdvance,false)
输出:


你不能复制,你必须创建你自己的自定义轮子伟大的库…令人难以置信的是,android库缺少像禁用某些时间范围这样基本的东西。谢谢分享。。。