39697
<https://akira-watson.com/android/datepicker-timepicker.html>  
こちらを参考にTimePickerをDialogで表示することができました。  
[![画像の説明をここに入力](https://i.stack.imgur.com/dNwEX.jpg)](https://i.stack.imgur.com/dNwEX.jpg)

上記画像にOKとCANCELボタンがありますが、さらに二つの（出勤、退勤）ボタンを追加したいと思っています。

公式リファレンスにはデザインを実装することは書いてありませんでした  
<https://developer.android.com/reference/android/widget/TimePicker.html>

OKとCANCELボタンを出勤、退勤にする方法も考えましたが、現時点でこのTimePickerのCANCELボタンはonCancelをハンドリングすることができないそうです。

minSdkVersion 21-26です。
CC BY-SA 3.0
2017-11-19T03:52:40.693
39687
2017-11-22T08:45:15.393
7973
question
android java android-studio android-layout
AndroidStudio DialogのTimePickerにボタンを追加する方法
質問時にはできるだけ、今現在のあなたのコードを提示してください。  
リンク先がなくなった場合など、この質問・回答が無意味になってしまいます。

* * *

TimePickerDialog だと、もう Dialog が完成してしまっていて、後からボタンを追加するなどは  
できなさそうです。

そこで、AlertDialog.Builder を使ってボタンを設定するようにしてみました。

TimePick.java:

```

    import android.app.Dialog;
    import android.app.TimePickerDialog;
    import android.app.AlertDialog;
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.v4.app.DialogFragment;
    import android.widget.TimePicker;
    import android.content.DialogInterface;
    import java.util.Calendar;
    
    public class TimePick extends DialogFragment {
        private int hour;
        private int minute;
    
        @NonNull
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            final Calendar c = Calendar.getInstance();
            hour = c.get(Calendar.HOUR_OF_DAY);
            minute = c.get(Calendar.MINUTE);
    
            final TimePicker picker = new TimePicker(getActivity());
            picker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
                @Override
                public void onTimeChanged(TimePicker picker, int hourOfDay, int minute) {
                    TimePick.this.hour = hourOfDay;
                    TimePick.this.minute = minute;
                }
            });
    
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setMessage("Set Time")
                    .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            ((MainActivity) getActivity()).onTimeSet(picker, hour, minute, true);
                        }
                    })
                    .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                        }
                    })
                    .setNeutralButton(R.string.neutral, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            ((MainActivity) getActivity()).onTimeSet(picker, hour, minute, false);
                        }
                    })
                    .setView(picker);
            return builder.create();
        }
    }
    
```

MainActivity.java:

```

    import android.app.TimePickerDialog;
    import android.os.Bundle;
    import android.support.v4.app.DialogFragment;
    import android.support.v4.app.FragmentActivity;
    import android.view.View;
    import android.widget.TextView;
    import android.widget.TimePicker;
    import java.util.Locale;
    
    
    public class MainActivity extends FragmentActivity {
    
        private TextView textView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            textView = findViewById(R.id.textView);
        }
    
        public void onTimeSet(TimePicker view, int hourOfDay, int minute, boolean onoff) {
    
            String str = String.format(Locale.US, "%d:%d %s", hourOfDay, minute, onoff ? "出勤" : "退勤");
            textView.setText( str );
    
        }
    
        public void showTimePickerDialog(View v) {
            DialogFragment newFragment = new TimePick();
            newFragment.show(getSupportFragmentManager(), "timePicker");
    
        }
    }
    
```

strings.xml:

```

    <resources>
        <string name="app_name">TestTimePicker</string>
        <string name="no_data">"No Data"</string>
        <string name="pick_time">Pick Time</string>
    
        <string name="OK">出勤</string>
        <string name="cancel">CANCEL"</string>
        <string name="neutral">退勤</string>
    </resources>
    
```

なお、AlertDialog には、Positive, Negative, Neutral の3つのボタンしか設置できないようです。  
あと、配置の調整ができるのかどうかが解りませんでした。そのため、退勤ボタンだけ左に寄っています。
CC BY-SA 3.0
2017-11-19T16:04:22.687
39697
2017-11-19T16:04:22.687
5288
39687
answer