Я хотел бы создать элемент управления, который позволяет пользователю выбрать день недели (понедельник) и время дня (1:00 PM) в моем Активность Android. Не удалось найти хорошие посты?День недели и выбор времени в Android для повторяющегося события
ответ
ОК, я думаю, что понял. Я просто не люблю это решение, потому что Spinner, который я использую в течение дня недели, не соответствует теме «timepicker», поэтому выглядит очень плохо.
EDIT: Я изменил макет для счетчика, который вы можете видеть в нижней части сообщения, теперь выглядит намного лучше.
DayTimePickerFragment.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View thisDialog = inflater.inflate(R.layout.picker_day_time, container, false);
Button btnDateTimeOK = (Button)thisDialog.findViewById(R.id.btnDateTimeOK);
Button btnDateTimeCancel = (Button)thisDialog.findViewById(R.id.btnDateTimeCancel);
final Spinner spinSelectedDay = (Spinner)thisDialog.findViewById(R.id.spinSelectedDay);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), R.layout.spinner_item_day_picker, getResources().getStringArray(R.array.days_of_week));
spinSelectedDay.setAdapter(adapter);
final TimePicker tpSelectedTime = (TimePicker)thisDialog.findViewById(R.id.tpSelectedTime);
btnDateTimeCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ActionBarActivity thisActivity = (ActionBarActivity) getActivity();
getDialog().dismiss();
}
});
btnDateTimeOK.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
ActionBarActivity thisActivity = (ActionBarActivity) getActivity();
String strTime = null, strDay = null, strHour = null, strMinute = null, strAM_PM = null;
strDay = ((String)spinSelectedDay.getSelectedItem());
strMinute = tpSelectedTime.getCurrentMinute().toString();
if (tpSelectedTime.getCurrentMinute() < 10){
strMinute = "0"+strMinute;
}
if (tpSelectedTime.getCurrentHour() > 12){
strHour = (tpSelectedTime.getCurrentHour() - 12)+"";
strAM_PM = "PM";
}else if(tpSelectedTime.getCurrentHour() == 12){
strHour = tpSelectedTime.getCurrentHour().toString();
strAM_PM = "PM";
}else if(tpSelectedTime.getCurrentHour() < 12){
strHour = tpSelectedTime.getCurrentHour().toString();
strAM_PM = "AM";
}
if (strHour != null && strAM_PM != null){
strTime = strHour + ":" + strMinute + " " + strAM_PM;
}
etTarget.setText(strDay + " " + strTime);
getDialog().dismiss();
}
});
return thisDialog;
}
picker_day_time.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >
<Spinner android:id="@+id/spinSelectedDay" android:layout_width="fill_parent" android:layout_height="wrap_content">
</Spinner>
<TimePicker android:id="@+id/tpSelectedTime"
android:layout_width="wrap_content" android:layout_height="wrap_content" >
</TimePicker>
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<Button android:id="@+id/btnDateTimeCancel" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1"
android:text="@string/button_text_cancel" android:onClick="DateTimeClickCancel" />
<Button android:id="@+id/btnDateTimeOK" android:layout_width="0dip" android:layout_height="wrap_content"
android:layout_weight="1" android:text="@string/button_text_ok" android:onClick="DateTimeClickOK" />
</LinearLayout>
</LinearLayout>
spinner_item_day_picker.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:text="Thursday"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:textSize="@dimen/text_size_x_large" android:padding="10dp" android:gravity="center"/>
Вы можете приложить картинку – bubakazouba
Вы можете попробовать использовать некоторые внешние библиотеки, как андроид-betterpickers. Он имеет, по крайней мере, на мой взгляд, отличный дизайн:
Я комбинированную день недели и выбора времени в одном диалоге.
Вы можете проверить библиотеку here
Вы сначала создать слушателя:
final SlideDayTimeListener listener = new SlideDayTimeListener() {
@Override
public void onDayTimeSet(int day, int hour, int minute)
{
// Do something with the day, hour and minute
// the user has selected.
}
@Override
public void onDayTimeCancel()
{
// The user has canceled the dialog.
// This override is optional.
}
};
Затем вы используете конструктор, чтобы показать диалог:
new SlideDayTimePicker.Builder(getSupportFragmentManager())
.setListener(listener)
.setInitialDay(1)
.setInitialHour(13)
.setInitialMinute(30)
.build()
.show();
надеюсь, что вы найдете ее полезной ,
Так в основном вы хотите диалог, который имеет DatePicker и TimePicker в том же диалоге? –
что-то вроде календаря Google? когда вы выбираете дату и время –
Нет, мне нужен только день недели и время, нет даты. – Jarrette