I'm using a TimePicker in my current project that needs the minutes to only work in half hour intervals. I'm using the time picker set to spinner mode inside a dialog box that pops up when a user clicks on an EditText. I have also tried to use NumberPickers to write more of a custom TimePicker but had minimal success because instead of getting the value that was displayed on the NumberPicker it got the position of the value displayed in the String array and displayed that instead. Below is the Activity the EditText is on.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/action_bar"
android:layout_width="match_parent"
android:layout_height="56dp"
app:contentInsetEnd="0dp"
app:contentInsetStart="0dp">
<include layout="@layout/custom_actionbar" />
</android.support.v7.widget.Toolbar>
<TextView
android:id="@+id/change_date_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/action_bar"
android:textSize="70sp"
android:gravity="center"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:onClick="dateChangeDialog"/>
<TextView
android:id="@+id/change_time_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/change_date_textview"
android:text="@string/by_time_initial_time"
android:textSize="70sp"
android:gravity="center"
android:layout_centerHorizontal="true"
android:onClick="timeChangeDialog"
android:paddingBottom="10dp"/>
<Button
android:id="@+id/search_for_rooms_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/change_time_textview"
android:layout_centerHorizontal="true"
android:text="@string/search_for_avaiable_rooms"
android:onClick="searchForRoom"/>
</RelativeLayout>
Below here is the custom dialog I have written
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<TextView
android:id="@+id/dialog_time_edittext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_time_title"
android:textSize="30sp"
android:layout_centerHorizontal="true"/>
<TimePicker
android:id="@+id/dialog_time_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:timePickerMode="spinner"
android:layout_below="@id/dialog_time_edittext"
android:layout_centerHorizontal="true"
android:layout_marginBottom="5dp"/>
<Button
android:id="@+id/dialog_enter_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/dialog_time_spinner"
android:layout_alignStart="@+id/dialog_time_spinner"
android:layout_alignEnd="@+id/dialog_time_spinner"
android:text="@string/dialog_time_confirm_time"
android:layout_marginBottom="5dp"/>
</RelativeLayout>
And then here is the Java behind the activity.
/**
* Created by Matt on 12/10/2015.
*/
public class GetAvailableRoomsByTimeActivity extends Activity{
private TextView mActionBarTextView;
private TextView mTimeTextView;
private TextView mDateTextView;
private Button mDateConfirmButton;
private Button mDialogEnterButton;
private DatePicker mDialogDatePicker;
private TimePicker mDialogTimePicker;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_get_rooms_by_time);
initialSetup();
setDateTextView();
actionBarSetup();
}
public void searchForRoom(View view){
new GetAvailableRoomsByTime(getApplicationContext()).execute("10:00:00", "19-10-2015");
}
public void timeChangeDialog(View view) {
final Dialog dialog = new Dialog(GetAvailableRoomsByTimeActivity.this);
dialog.setContentView(R.layout.dialog_time_picker);
mDialogTimePicker = (TimePicker)dialog.findViewById(R.id.dialog_time_spinner);
mDialogEnterButton=(Button)dialog.findViewById(R.id.dialog_enter_button);
mDialogTimePicker.setIs24HourView(true);
dialog.show();
mDialogEnterButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String chosenTime = mDialogTimePicker.getCurrentHour().toString() + ":" +
mDialogTimePicker.getCurrentMinute().toString();
mTimeTextView.setText(chosenTime);
dialog.dismiss();
}
});
dialog.show();
}
public void dateChangeDialog(View view){
final Dialog dialog = new Dialog(GetAvailableRoomsByTimeActivity.this);
dialog.setContentView(R.layout.dialog_date_picker);
mDialogDatePicker = (DatePicker)dialog.findViewById(R.id.dialog_date_date_picker);
mDateConfirmButton = (Button)dialog.findViewById(R.id.dialog_confirm_date);
mDialogDatePicker.setCalendarViewShown(false);
dialog.show();
mDateConfirmButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("dd/MM/yy");
DateTime dateTime = new DateTime(mDialogDatePicker.getYear(), (mDialogDatePicker.getMonth() + 1 ), mDialogDatePicker.getDayOfMonth()
, 0, 0);
String date = dateTimeFormatter.print(dateTime);
mDateTextView.setText(date);
dialog.dismiss();
}
});
}
public void actionBarSetup(){
mActionBarTextView = (TextView)findViewById(R.id.text_bar);
mActionBarTextView.setText("Get Room By Time");
}
public void backToPreviousPage(View view){
startActivity(new Intent(GetAvailableRoomsByTimeActivity.this, AdminDashboard.class));
}
public void setDateTextView(){
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("dd/MM/yy");
DateTime dateTime = new DateTime();
String date = dateTimeFormatter.print(dateTime);
mDateTextView.setText(date);
}
public void initialSetup(){
mTimeTextView = (TextView)findViewById(R.id.change_time_textview);
mDateTextView = (TextView)findViewById(R.id.change_date_textview);
}
}
Thanks a lot for any help!