4

ここでGoogleが推奨するように、DialogFragmentを使用して日付ピッカーをホストしようとしています: http://developer.android.com/guide/topics/ui/controls/pickers.html

上のページのサンプル コードを使用しても問題ありませんが、日付ピッカー ダイアログに特定のテーマを設定できるようにしたいと考えています。

サンプルのダイアログ フラグメントの 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 )

国境をなくすにはどうしたらいいですか?

4

2 に答える 2

3

これは少し古いかもしれませんが、他の人がこの質問を見つけた場合に備えて、少なくともここで答えます.
この他のスタックオーバーフローの質問で答えを見つけることができると思いますおそらく重複ですが、それを1つとしてマークする方法がわかりません)。

そこでの答えは、ウィンドウの背景を次のように設定することでした。
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

それが役に立てば幸い。

于 2015-07-22T09:37:03.923 に答える
2

私はそれがもう1年前であることを知っていますが、おそらく他の誰かがその問題の解決策を必要としています. 昨日、私は同じ問題を抱えていましたが、小さな回避策で解決しました。Androidから提供されたものではなく、独自のDatePickerDialogを作成しました。

コードは次のとおりです。

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");
于 2013-06-16T22:26:31.830 に答える