2012-06-30 4 views
3

Я пытаюсь использовать DialogFragment для размещения выбора даты в соответствии с рекомендациями Google здесь: http://developer.android.com/guide/topics/ui/controls/pickers.htmlПользовательские темы для андроид DatePicker DialogFragment показывает неприятны границы

Используя образец кода на странице выше, работает нормально, но я хочу уметь задавать конкретную тему для диалога выбора даты.

Если я изменить метод OnCreateDialog в диалоговом фрагменте из их образца, так что она возвращает выбор даты с определенной темой, как эта

... 
// Create a new instance of DatePickerDialog and return it 
DatePickerDialog dlg = new DatePickerDialog(getActivity(), 
    Android.R.style.Theme_DeviceDefault_Light_Dialog, this, year, month, day); 
return dlg; 
... 

(т.е. только с помощью другого конструктора для DatePickerDialog, где вы можете обеспечить тему) я некрасивый непрозрачную границу вокруг моего выбора даты, когда оно отображается:

(скриншот здесь: http://i.stack.imgur.com/WO1YD.png)

Что я могу сделать, чтобы получить ри d границы?

+0

Оказалось, что проблема не в фрагментах, я получаю один и тот же сломанный макет даже без фрагментов, когда создаю диалоговое окно, используя «DatePickerDialog» (контекст контекста, ** int theme **, DatePickerDialog.OnDateSetListener callBack, int year , int monthOfYear, int dayOfMonth) 'constructor – Vlad

ответ

2

Я знаю, что это уже год назад, но, возможно, кому-то еще нужно решение этой проблемы. Вчера у меня была та же проблема, и я решил ее с небольшим обходным решением. Я сделал свой собственный DatePickerDialog вместо предоставленного от android.

Вот код:

dialog_date_picker.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

<DatePicker 
     android:id="@+id/dlgDatePicker" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:spinnersShown="true" 
     android:calendarViewShown="false"/> 

<View 
     android:layout_width="fill_parent" 
     android:layout_height="1dp" 
     android:background="@android:color/darker_gray"/> 

<Button 
     android:id="@+id/dlgDatePickerBtnDone" 
     style="?android:attr/buttonBarButtonStyle" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="@string/dlg_date_picker_button" 
     /> 

</LinearLayout> 

DialogDatePicker.java

public class DialogDatePicker extends DialogFragment { 

private DatePicker dp; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.dialog_date_picker, container); 
    dp = (DatePicker) view.findViewById(R.id.dlgDatePicker); 
    view.findViewById(R.id.dlgDatePickerBtnDone).setOnClickListener(setDate); 
    getDialog().setTitle(R.string.dlg_date_picker_title); 
    return view; 
} 

private View.OnClickListener setDate = new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     int dayOfMonth = dp.getDayOfMonth(); 
     int monthOfYear = dp.getMonth()+1; //0 = jan, 1 = feb, ... 
     int year = dp.getYear(); 

     String date = String.format(Locale.GERMANY,"%s.%s.%s", dayOfMonth, monthOfYear, year); 
     ((TextView) getActivity().findViewById(R.id.route_setting_date)) 
       .setText(date); 

     dismiss(); 
    } 
}; 

} 

и, наконец, вызов с новой темой

DialogDatePicker ddp = new DialogDatePicker(); 
ddp.setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Holo_Dialog); 
ddp.show(getFragmentManager(),"DialogDatePicker"); 
3

Это может быть аб он старый, но, по крайней мере, я отвечу здесь, на всякий случай, если другие люди найдут этот вопрос.
Я считаю, что вы можете найти ответ here, в этом другом вопросе переполнения стека (вероятно, дубликат, но не знаете, как отметить его как один).

Ответа есть садился фон окна, как это:
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

Надеется, что это помогает.