如何更改默认颜色方案timepicker对话框片段?

时间:2015-06-21 12:09:06

标签: javascript android android-fragments android-theme android-timepicker

我正在尝试更改timepicker对话框片段的默认颜色。 而现在我不知道我应该做什么。

这就是我设法将主题设置为(没有actionBar):

enter image description here

但这是我得到的对话: enter image description here

这是我的xml样式文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/color_accent</item>
        <item name="colorPrimaryDark">@color/color_secondary</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:statusBarColor">@color/color_primary</item>
    </style>
</resources>

我的颜色文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="flat_text">#f14268</color>
    <color name="background_flatbtn">#fff</color>
    <color name="color_accent">#f14268</color>
    <color name="color_primary">#d83b5d</color>
    <color name="color_secondary">#d83b5d</color>
</resources>

mytimepicker片段:

public class DialogHandler extends DialogFragment
        implements TimePickerDialog.OnTimeSetListener {
    Context context;

    public DialogHandler(Context context){
        this.context=context;

    }

    @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);
        TimePickerDialog dialog= new TimePickerDialog(new ContextThemeWrapper(getActivity(),R.style.AppTheme), this, hour, minute, DateFormat.is24HourFormat(getActivity()));
        // Create a new instance of TimePickerDialog and return it
        return dialog;
    }

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // Do something with the time chosen by the user
        Toast.makeText(context, "your time is selected",Toast.LENGTH_LONG).show();
    }
}

我的对话:

DialogHandler newFragment = new DialogHandler(getApplicationContext());
        newFragment.show(getSupportFragmentManager() , "time_Picker");

请帮帮我。 在此先感谢:)

2 个答案:

答案 0 :(得分:4)

花了一段时间,但我想出来了! 在您的时间选择器

中设置自定义主题
  

转到styles.xml页面。   添加一个新主题:

<style name="Dialog" parent="Base.Theme.AppCompat.Dialog">
        <itemname="android:timePickerDialogTheme">@style/AppTheme2</item>
</style>
  

定义一个继承你的自定义应用主题的主题(以保持应用程序的一致性),这里可以提到timepicker对话框的属性:

<style name="AppTheme2" parent="AppTheme.Base">
        <item name="android:windowIsFloating">true</item>
</style>
  

对我而言,这是我用于整个应用程序的自定义主题:

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primary_dark</item>
        <item name="colorAccent">@color/accent</item>
</style>
  

在时间选择器的调用中应用主题

TimePickerDialog dialog= new TimePickerDialog(
 new ContextThemeWrapper(getActivity(),R.style.Dialog)
, this, hour, minute
, DateFormat.is24HourFormat(getActivity())); 

根据我的猜测,如果你想再进行自定义,你应该将它添加到AppTheme2风格中(或者你想要的任何名称)

  

这里有一个你可以添加到它的自定义列表(虽然不确定所有内容):

enter image description here

我希望这会有所帮助。我这里没有专家,但这似乎有用,所以我顺其自然;)

答案 1 :(得分:1)

您可以直接在构造函数中指定TimerPickerDialog的主题资源,而无需在App / Activity主题中使用ContextWrapperandroid:timePickerDialogTheme(仅限于此可从API 21获得。

TimePickerDialog的主题示例:

<style name="TimePicker" parent="Theme.AppCompat.Light.Dialog">
    <item name="android:windowIsFloating">true</item>
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
</style>

将其资源ID作为第二个参数传递:

TimePickerDialog dialog = new TimePickerDialog(getActivity(), R.style.TimePicker, 
this, hour, minute, false);