2013-12-23 3 views
3

Я хотел бы создать элемент управления, который позволяет пользователю выбрать день недели (понедельник) и время дня (1:00 PM) в моем Активность Android. Не удалось найти хорошие посты?День недели и выбор времени в Android для повторяющегося события

+0

Так в основном вы хотите диалог, который имеет DatePicker и TimePicker в том же диалоге? –

+0

что-то вроде календаря Google? когда вы выбираете дату и время –

+0

Нет, мне нужен только день недели и время, нет даты. – Jarrette

ответ

1

ОК, я думаю, что понял. Я просто не люблю это решение, потому что 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"/> 
+3

Вы можете приложить картинку – bubakazouba

2

Вы можете попробовать использовать некоторые внешние библиотеки, как андроид-betterpickers. Он имеет, по крайней мере, на мой взгляд, отличный дизайн:

https://github.com/derekbrameyer/android-betterpickers

2

Я комбинированную день недели и выбора времени в одном диалоге.

Вы можете проверить библиотеку 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(); 

надеюсь, что вы найдете ее полезной ,

day of week and timepicker for android