Java 如何从android中的timepicker获取小时和分钟
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18606201/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
how to get hour and minute from timepicker in android
提问by Paul
This is code I got for TimePicker.
这是我为 TimePicker 获得的代码。
TimePicker.java
时间选择器
public class TimePicker extends EditText implements
android.app.TimePickerDialog.OnTimeSetListener {
public interface OnTimeSetListener {
public void onTimeSet(TimePicker view, int hour, int minute);
}
protected int hour;
protected int minute;
protected OnTimeSetListener onTimeSetListener;
protected java.text.DateFormat timeFormat;
public int getHour() {
return hour;
}
public OnTimeSetListener getOnTimeSetListener() {
return onTimeSetListener;
}
public void setOnTimeSetListener(OnTimeSetListener onTimeSetListener) {
this.onTimeSetListener = onTimeSetListener;
}
public void setHour(int hour) {
this.hour = hour;
updateText();
}
public int getMinute() {
return minute;
}
public void setNow() {
Calendar c = Calendar.getInstance();
setTime(c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE));
}
public void setMinute(int minute) {
this.minute = minute;
updateText();
}
public void setTime(int hour, int minute) {
this.hour = hour;
this.minute = minute;
updateText();
}
public TimePicker(Context context, AttributeSet attrs) {
super(context, attrs);
timeFormat = DateFormat.getTimeFormat(getContext());
setInputType(InputType.TYPE_DATETIME_VARIATION_DATE);
setFocusable(false);
setNow();
}
protected void showTimePicker() {
TimePickerDialog timePickerDialog;
timePickerDialog = new TimePickerDialog(getContext(), this, getHour(),
getMinute(), true);
timePickerDialog.show();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
showTimePicker();
return super.onTouchEvent(event);
}
public java.text.DateFormat getTimeFormat() {
return timeFormat;
}
public void setTimeFormat(java.text.DateFormat timeFormat) {
this.timeFormat = timeFormat;
updateText();
}
@Override
public void onTimeSet(android.widget.TimePicker view, int hour, int minute) {
// TODO Auto-generated method stub
setTime(hour, minute);
clearFocus();
if (onTimeSetListener != null){
onTimeSetListener.onTimeSet(this, hour, minute);
}
}
public void updateText() {
Calendar cal = new GregorianCalendar(0, 0, 0, getHour(), getMinute());
setText(timeFormat.format(cal.getTime()));
}
}
}
calendar_events.xml
calendar_events.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="@color/maroon"
tools:context="com.gpplsmje.mac.calendar.CalendarEvents" >
<com.gpplsmje.mac.calendar.utils.TimePicker
android:id="@+id/alarm_time"
style="@android:style/Widget.Holo.Light.Spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="60"
android:gravity="center"
android:textColor="@color/white" />
</RelativeLayout>
CalendarEvents.java
日历事件.java
public class CalendarEvents extends Activity implements OnClickListener {
TimePicker notifyTime;
Button back, cancel, done;
int hour, minute, day, month, year;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calendar_events);
onNewIntent(getIntent());
notifyTime = ((TimePicker) findViewById(R.id.alarm_time));
notifyTime.setTimeFormat(DateFormat.getTimeFormat(this));
hour = notifyTime.getHour();
minute = notifyTime.getdMinute();
done.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.bDone:
Toast.makeText(this, year + " " + month + " " + day + " " + hour + " " + minute , Toast.LENGTH_LONG).show();
break;
}
}
I made a Toast
message to check if what I have selected from the TimePicker
is the right thing. But every time I run this code it always gives me the current time on my machine and not the time I selected from the TimePicker
. How do I accomplish this? Can any one please help me? Thanks in advance.
我发了一条Toast
消息来检查我从中选择的内容TimePicker
是否正确。但是每次我运行这段代码时,它总是给我机器上的当前时间,而不是我从TimePicker
. 我该如何实现?谁能帮帮我吗?提前致谢。
回答by Umang Mehta
To read the time entered by the user, Use a listener
要读取用户输入的时间,请使用侦听器
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mHour = hourOfDay;
mMinute = minute;
updateDisplay();
}
};
回答by kalyan pvs
Use this method setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener)
使用这个方法 setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener)
and this class when working with timepicker. timepicker
以及使用 timepicker 时的此类。 时间选择器
not onclick listener on it..
不是 onclick 监听器就可以了..
回答by jbr3zy
If you clear focus from the TimePicker in your onClick()
handler, you can use its public methodsto get the selected time values as integers:
如果您从onClick()
处理程序中的 TimePicker 清除焦点,则可以使用其公共方法将选定的时间值作为整数获取:
public void onClick(View v) {
...
notifyTime = ((TimePicker) findViewById(R.id.alarm_time));
notifyTime.clearFocus();
hour = notifyTime.getCurrentHour();
minute = notifyTime.getCurrentMinute();
....
}
回答by jbr3zy
This way you can get the time
这样你就可以得到时间
Calendar mCalendar = Calendar.getInstance();
mHour = mCalendar.get(Calendar.HOUR_OF_DAY);
mMinute = mCalendar.get(Calendar.MINUTE);
TimePickerDialog timePickerDialog = new TimePickerDialog(mActivity, mTimeSetListener, mHour, mMinute, false);
private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
mCalendar.set(Calendar.MINUTE, mMinute);
SimpleDateFormat mSDF = new SimpleDateFormat("hh:mm a");
String time = mSDF.format(mCalendar.getTime());
}
}