1

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!

drofnnuD
  • 76
  • 8

0 Answers0