- Get link
- X
- Other Apps
The PreferenceScreen can be customized to accept different kinds of settings. For example there is no "time" preference built into android. However, we can easily do this by extending the DialogPreference class.
The code below allows you to set a time on the preference screen. We accomplish this by overriding the dialog view to a TimePicker and bind it to our local variables.
We also override its view on the Preference screen to display the current chosen time so we don't have to click through it to see what it is set to.
The code below allows you to set a time on the preference screen. We accomplish this by overriding the dialog view to a TimePicker and bind it to our local variables.
We also override its view on the Preference screen to display the current chosen time so we don't have to click through it to see what it is set to.
public class TimePreference extends DialogPreference {
private int lastHour=0;
private int lastMinute=0;
private boolean is24HourFormat;
private TimePicker picker=null;
private TextView timeDisplay;
public TimePreference(Context ctxt) {
this(ctxt, null);
}
public TimePreference(Context ctxt, AttributeSet attrs) {
this(ctxt, attrs, 0);
}
@SuppressLint("NewApi")
public TimePreference(Context ctxt, AttributeSet attrs, int defStyle) {
super(ctxt, attrs, defStyle);
is24HourFormat = DateFormat.is24HourFormat(ctxt);
setPositiveButtonText("Set");
setNegativeButtonText("Cancel");
}
@Override
public String toString() {
if(is24HourFormat) {
return ((lastHour < 10) ? "0" : "")
+ Integer.toString(lastHour)
+ ":" + ((lastMinute < 10) ? "0" : "")
+ Integer.toString(lastMinute);
} else {
int myHour = lastHour % 12;
return ((myHour == 0) ? "12" : ((myHour < 10) ? "0" : "") + Integer.toString(myHour))
+ ":" + ((lastMinute < 10) ? "0" : "")
+ Integer.toString(lastMinute)
+ ((lastHour >= 12) ? " PM" : " AM");
}
}
@Override
protected View onCreateDialogView() {
picker=new TimePicker(getContext().getApplicationContext());
return(picker);
}
@Override
protected void onBindDialogView(View v) {
super.onBindDialogView(v);
picker.setIs24HourView(is24HourFormat);
picker.setCurrentHour(lastHour);
picker.setCurrentMinute(lastMinute);
}
@Override
protected View onCreateView (ViewGroup parent) {
View prefView = super.onCreateView(parent);
LinearLayout layout = new LinearLayout(parent.getContext());
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.FILL_PARENT, 2);
layout.addView(prefView, lp);
timeDisplay = new TextView(parent.getContext());
timeDisplay.setGravity(Gravity.BOTTOM | Gravity.RIGHT);
timeDisplay.setText(toString());
LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.FILL_PARENT, 1);
layout.addView(timeDisplay, lp2);
return layout;
}
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if (positiveResult) {
picker.clearFocus();
lastHour=picker.getCurrentHour();
lastMinute=picker.getCurrentMinute();
String time=String.valueOf(lastHour)+":"+String.valueOf(lastMinute);
if (callChangeListener(time)) {
persistString(time);
timeDisplay.setText(toString());
}
}
}
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return(a.getString(index));
}
@Override
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
String time=null;
if (restoreValue) {
if (defaultValue==null) {
time=getPersistedString("00:00");
}
else {
time=getPersistedString(defaultValue.toString());
}
}
else {
if (defaultValue==null) {
time="00:00";
}
else {
time=defaultValue.toString();
}
if (shouldPersist()) {
persistString(time);
}
}
String[] timeParts=time.split(":");
lastHour=Integer.parseInt(timeParts[0]);
lastMinute=Integer.parseInt(timeParts[1]);;
}
}
- Get link
- X
- Other Apps
Comments
Post a Comment