Android 将TimePickerDialog的主题更改为使用AppTheme

Android 将TimePickerDialog的主题更改为使用AppTheme,android,Android,我使用中给出的以下代码实现了一个TimePickerDialog: } 我得到了这样一个对话框: 我想更改TimePickerDialog的主题,以与扩展AppCompat主题的AppTheme配合使用。当我按照一些人的说法使用另一个构造函数时,主题可以工作,但是对话框将全屏显示。我使用的代码是: // Create a new instance of TimePickerDialog and return it return new TimePickerDialog(getA

我使用中给出的以下代码实现了一个
TimePickerDialog

}

我得到了这样一个对话框:

我想更改
TimePickerDialog
的主题,以与扩展
AppCompat
主题的
AppTheme
配合使用。当我按照一些人的说法使用另一个构造函数时,主题可以工作,但是
对话框将全屏显示。我使用的代码是:

// Create a new instance of TimePickerDialog and return it
        return new TimePickerDialog(getActivity(), R.style.AppTheme, 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);
}
}

有关更详细的示例,请参见


我希望这将对您有所帮助。

您必须使用
主题.AppCompat.Light.Dialog
作为
父主题

您需要在
style.xml
中定义
Dialog
主题

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

我希望它能帮助你。

啊,该死的。好像我错过了。非常感谢!它起作用了。我不得不使用
而不是
colorControlNormal
。不知道为什么。但是成功了!为什么在values-v21 xml中使用Theme.AppCompat.Light.Dialog.Alert不起作用???我试过这个。但这使我们能够使用一个内置主题,而不是自定义主题。@rajesh说的正是我想要的。谢谢
 <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()));