Как я могу добиться этого макета для выбора времени (а также для выбора даты)? Макет по умолчанию — это либо (очень большие) часы, либо (некрасивый) счетчик времени в стиле спиннера. Я видел это в нескольких приложениях, но не мог найти, как добиться такого внешнего вида.
Колесо выбора даты/времени Android
Ответы (5)
Для дальнейшего использования для всех, кому это может понадобиться, можно добиться этого счетчика выбора времени, просто выбрав TimePicker среди виджетов Android, а затем в файле xml введите android:timePickerMode="spinner"
.
XML-код вашего виджета должен выглядеть так:
<TimePicker
android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:timePickerMode="spinner" />
Мой ответ был основан на документации.
На мой взгляд, самый простой способ добиться этого - начиная с уровня API 21:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="8dp">
<TimePicker
android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:timePickerMode="spinner" />
<DatePicker
android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:calendarViewShown="false"
android:datePickerMode="spinner" />
</LinearLayout>
Вы получаете это:
В этом примере есть три средства выбора: NumberPicker, DatePicker и TimerPicker.
https://github.com/rodrigobusata/android-pickers
or
Используйте только образец без библиотеки и переопределите средства выбора по умолчанию для Android.
Обратите внимание, что этот диалог является фрагментом.
Тем не менее, основная идея будет заключаться в следующем: когда вам нужно запустить этот выбор даты, вы покажете этот фрагмент как наложение текущей активности. В этом фрагменте есть слушатель выбора даты: событие, которое запускается, когда пользователь выбирает дату. Хорошо, все просто, пока здесь. Сложнее всего будет понять последнее: взаимодействие между фрагментом и активностью. Зачем? Поскольку действие должно знать, какая дата была выбрана. Для этого фрагмент будет иметь общедоступный интерфейс, который будет реализован активностью.
Хорошо, давайте посмотрим код:
MyActivity.java
public class MyActivity extends FragmentActivity implements DatePickerFragment.FragmentInteraction{
@Override
public void onCreate(Bundle savedInstanceState){
Button showDatePickerButton = (Button)findViewById(R.id.dateButton);
showDatePickerButtonsetOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), getString(R.string.datePickerTitle));
}
});
}
@Override
public void doSomethingWithDate(int day, int month, int year) {
Log.d("", "SELECTED DATE " + month + "/" + day + "/" + year);
}
}
DatePickerFragment.java
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{
private FragmentInteraction mListener;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mListener = (FragmentInteraction) activity;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
//Show picker with actual date presetted
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(DatePicker view, int anio, int mes, int dia) {
mListener.doSomethingWithDate(dia, mes + 1, anio);
}
public interface FragmentInteraction{
public void doSomethingWithDate(int dia, int mes, int anio);
}
}
Просто добавьте timepickermode в xml вот так <TimePicker
android:id="@+id/time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:gravity="center"
android:timePickerMode="spinner"
android:text="TimePicker"
android:textSize="18sp"
android:textColor="@android:color/black"
android:textStyle="bold"/>