8

を使用しDialogFragmentDatePickerDialog

public class DatePickerFragment extends DialogFragment{

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    // Use the current date as the default date in the picker
    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
    DatePickerDialog DatePickerDialog = new DatePickerDialog(getActivity(), (ProfileCreationActivity)getActivity(), year, month, day);
    return DatePickerDialog;
}

私はスピナーの外観を好むカレンダーの外観を取得しています。

私は試した:

datePickerDialog.getDatePicker().setCalendarViewShown(false);

datePickerDialog.getDatePicker().setLayoutMode(1);

しかし、それは機能しません。

ある活動にはスピナーの外観が必要ですが、別の活動にはカレンダー ビューが必要であることに注意してください。そのため、アプリケーション スタイル全体を変更することはできません。1 つのアクティビティにカスタム スタイルが必要です。

4

4 に答える 4

8

次の投稿で説明を見つけました(これは私のものと非常によく似た問題を説明しています):

Android マテリアル デザイン インライン Datepicker の問題

実際、setCalendarViewShown(false) と setSpinnersShown(true) は、最新バージョンでは機能していないようです。

このandroid:datePickerMode="spinner"のような明示的な XML 属性を使用する必要があります。

問題は、XML レイアウト (日付ピッカー ダイアログのみ) なしで DialogFragment を使用していることです。そのため、XML 属性を設定できません。

解決策は、要求された属性を使用して、XML レイアウト ファイルで専用のカスタム ダイアログを作成することです。

于 2015-07-12T15:36:56.903 に答える
8

プログラムで保持できます。スピナーで新しい XML を作成する必要はありません。AppTheme(v21) スタイルを変更して作業するだけです ;-)

<style name="AppTheme"  parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="colorControlActivated">@color/colorPrimary</item>
    <item name="android:timePickerDialogTheme">@style/PickerDialogCustom</item>
    <item name="android:datePickerDialogTheme">@style/PickerDialogCustom</item>
    <item name="alertDialogTheme">@style/AlertDialogCustom</item>
</style>

<style name="PickerDialogCustom" parent="AlertDialogCustom">
    <item name="android:textColor">@color/colorPrimary</item>
    <item name="android:textColorPrimary">@color/colorPrimaryDark</item>
    <item name="colorControlNormal">@color/greyLight500</item>
    <item name="android:layout_margin">2dp</item>
    <item name="android:datePickerMode">spinner</item>
</style>

<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:positiveButtonText">@color/colorPrimary</item>
    <item name="android:negativeButtonText">@color/greyDark200</item>
    <item name="buttonBarNegativeButtonStyle">@style/negativeButton</item>
    <item name="android:datePickerStyle">@style/PickerDialogCustom</item>
</style>

この行を追加するだけで <21 のサポートを維持することを忘れないでください。このコマンドは >=21 では無視されます。

datePickerDialog.getDatePicker().setLayoutMode(1);
于 2016-09-02T12:42:33.297 に答える