我想要得到30 min interval
from time picker dialog
下面的代码可以正常工作Android N
但不适用于最新设备。下面是我的代码activity
.
public class MainActivity extends AppCompatActivity {
private TextView tvSelectedTime;
private Button btnOpentimePickerDialog;
private int intHour, intMinute;
private String strMin = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getIds();
setListner();
}
private void setListner() {
try {
btnOpentimePickerDialog.setOnClickListener(onClickListener);
} catch (Exception e) {
e.printStackTrace();
}
}
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
switch (view.getId()){
case R.id.btnOpentimePickerDialog:
openTimePicker();
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
private void openTimePicker() {
CustomTimePickerDialog timePickerDialog = new CustomTimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@SuppressLint("NewApi")
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Log.e("Log", "selected time----" + hourOfDay + ":" + minute);
String strTime = hourOfDay + ":"+ minute + ":00";
updateTime(hourOfDay, minute);
}
}, intHour, intMinute, false);
timePickerDialog.show();
}
private void updateTime(int hours, int mins) {
String timeSet = "";
if (hours > 12) {
hours -= 12;
timeSet = "PM";
} else if (hours == 0) {
hours += 12;
timeSet = "AM";
} else if (hours == 12)
timeSet = "PM";
else
timeSet = "AM";
//TODO=================Adding zero in one dightleft and right======================
if (mins < 10)
strMin = "0" + mins;
else
strMin = String.valueOf(mins);
// Append in a StringBuilder
String aTime = new StringBuilder().append(pad(hours)).append(':')
.append(pad(Integer.parseInt(strMin))).append(" ").append(timeSet).toString();
Log.e("aTime checking ==>",""+aTime);
tvSelectedTime.setText(aTime);
}
private void getIds() {
try {
btnOpentimePickerDialog = findViewById(R.id.btnOpentimePickerDialog);
tvSelectedTime = findViewById(R.id.tvSelectedTime);
} catch (Exception e) {
e.printStackTrace();
}
}
private String pad(int c) {
if (c >= 10)
return String.valueOf(c);
else
return "0" + String.valueOf(c);
}
}
下面是我的习惯time picker dialog code
.
public class CustomTimePickerDialog extends TimePickerDialog {
private final static int TIME_PICKER_INTERVAL = 30;
private TimePicker mTimePicker;
private final OnTimeSetListener mTimeSetListener;
public CustomTimePickerDialog(Context context, OnTimeSetListener listener, int hourOfDay, int minute, boolean is24HourView) {
super(context, TimePickerDialog.THEME_HOLO_LIGHT, null, hourOfDay,
minute / TIME_PICKER_INTERVAL, is24HourView);
mTimeSetListener = listener;
}
@Override
public void updateTime(int hourOfDay, int minuteOfHour) {
mTimePicker.setCurrentHour(hourOfDay);
mTimePicker.setCurrentMinute(minuteOfHour / TIME_PICKER_INTERVAL);
}
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case BUTTON_POSITIVE:
if (mTimeSetListener != null) {
mTimeSetListener.onTimeSet(mTimePicker, mTimePicker.getCurrentHour(),
mTimePicker.getCurrentMinute() * TIME_PICKER_INTERVAL);
}
break;
case BUTTON_NEGATIVE:
cancel();
break;
}
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
try {
Class<?> classForid = Class.forName("com.android.internal.R$id");
Field timePickerField = classForid.getField("timePicker");
mTimePicker = (TimePicker) findViewById(timePickerField.getInt(null));
Field field = classForid.getField("minute");
NumberPicker minuteSpinner = (NumberPicker) mTimePicker
.findViewById(field.getInt(null));
minuteSpinner.setMinValue(0);
minuteSpinner.setMaxValue((60 / TIME_PICKER_INTERVAL) - 1);
List<String> displayedValues = new ArrayList<>();
for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) {
displayedValues.add(String.format("%02d", i));
}
minuteSpinner.setDisplayedValues(displayedValues
.toArray(new String[displayedValues.size()]));
} catch (Exception e) {
e.printStackTrace();
}
}
}
在某些设备中,上面的代码工作正常,这是screenshot
.
在某些设备中我无法获得时间30 min interval
像下面这样。
其实我想实现time picker
就像所有设备都支持的第一个屏幕一样。