我正在尝试更改timepicker对话框片段的默认颜色。 而现在我不知道我应该做什么。
这就是我设法将主题设置为(没有actionBar):
但这是我得到的对话:
这是我的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");
请帮帮我。 在此先感谢:)
答案 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风格中(或者你想要的任何名称)
这里有一个你可以添加到它的自定义列表(虽然不确定所有内容):
我希望这会有所帮助。我这里没有专家,但这似乎有用,所以我顺其自然;)
答案 1 :(得分:1)
您可以直接在构造函数中指定TimerPickerDialog
的主题资源,而无需在App / Activity主题中使用ContextWrapper
或android: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);