簡體   English   中英

更改TimePickerDialog的主題以使用AppTheme

[英]Change theme of TimePickerDialog to use AppTheme

我使用developer.android.com中給出的以下代碼實現了一個TimePickerDialog

public static class TimePickerFragment extends DialogFragment
                        implements TimePickerDialog.OnTimeSetListener {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current time as the default values for the picker
    final Calendar c = Calendar.getInstance();
    int hour = c.get(Calendar.HOUR_OF_DAY);
    int minute = c.get(Calendar.MINUTE);

    // Create a new instance of TimePickerDialog and return it
    return new TimePickerDialog(getActivity(), this, hour, minute,
            DateFormat.is24HourFormat(getActivity()));
}

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    // Do something with the time chosen by the user
}

}

我得到一個像這樣的對話框:

在此輸入圖像描述

我想改變TimePickerDialog的主題,以擴展AppCompat主題的AppTheme 當我使用其他構造函數時,一些人說,主題可行,但Dialog全屏顯示。 我用的代碼是:

// Create a new instance of TimePickerDialog and return it
        return new TimePickerDialog(getActivity(), R.style.AppTheme, this, hour, minute,
                DateFormat.is24HourFormat(getActivity()));

我明白了:

在此輸入圖像描述

我該怎么做? - 我希望Dialog保持不變,但只改變強調色。 謝謝!

您必須使用Theme.AppCompat.Light.Dialog作為Parent Theme

您需要在styles.xml定義Dialog主題。

 <style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
        <item name="colorAccent">@color/purple</item>
        <item name="colorControlNormal">@color/orange</item>
 </style>

然后像這樣使用它:

// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), R.style.DialogTheme, this, hour, minute,
DateFormat.is24HourFormat(getActivity()));

我希望它對你有所幫助。

我們可以更改主題,如下例所示。

@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
    // Get a Calendar instance
    final Calendar calendar = Calendar.getInstance();
    // Get the current hour and minute
    int hour = calendar.get(Calendar.HOUR_OF_DAY);
    int minute = calendar.get(Calendar.MINUTE);

    /*
        Creates a new time picker dialog with the specified theme.

            TimePickerDialog(Context context, int themeResId,
                TimePickerDialog.OnTimeSetListener listener,
                int hourOfDay, int minute, boolean is24HourView)
     */

    // TimePickerDialog Theme : THEME_DEVICE_DEFAULT_LIGHT
    TimePickerDialog tpd = new TimePickerDialog(getActivity(),
            AlertDialog.THEME_DEVICE_DEFAULT_LIGHT,this,hour,minute,false);

    // TimePickerDialog Theme : THEME_DEVICE_DEFAULT_DARK
    TimePickerDialog tpd2 = new TimePickerDialog(getActivity(),
            AlertDialog.THEME_DEVICE_DEFAULT_DARK,this,hour,minute,false);

    // TimePickerDialog Theme : THEME_HOLO_DARK
    TimePickerDialog tpd3 = new TimePickerDialog(getActivity(),
            AlertDialog.THEME_HOLO_DARK,this,hour,minute,false);

    // TimePickerDialog Theme : THEME_HOLO_LIGHT
    TimePickerDialog tpd4 = new TimePickerDialog(getActivity(),
            AlertDialog.THEME_HOLO_LIGHT,this,hour,minute,false);

    // TimePickerDialog Theme : THEME_TRADITIONAL
    TimePickerDialog tpd5 = new TimePickerDialog(getActivity(),
            AlertDialog.THEME_TRADITIONAL,this,hour,minute,false);

    // Return the TimePickerDialog
    return tpd;
}

public void onTimeSet(TimePicker view, int hourOfDay, int minute){
    // Do something with the returned time
    TextView tv = (TextView) getActivity().findViewById(R.id.tv);
    tv.setText("HH:MM\n" + hourOfDay + ":" + minute);
}

}

有關更詳細的示例,請參閱本教程

我希望這能幫到您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM