我创建了一个TimePickerDialog并更改了默认颜色。另外,我想把风格改成不同的风格。
我找不到改变颜色的方法,同时也风格。
这就是我创建TimePickerDialog的方式:
TimePickerDialog代码:
public void showHourPicker() {
final Calendar myCalender = Calendar.getInstance();
int hour = myCalender.get(Calendar.HOUR_OF_DAY);
int minute = myCalender.get(Calendar.MINUTE);
TimePickerDialog.OnTimeSetListener myTimeListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
if (view.isShown()) {
myCalender.set(Calendar.HOUR_OF_DAY, hourOfDay);
myCalender.set(Calendar.MINUTE, minute);
updateHourEditText(myCalender);
}
}
};
TimePickerDialog timePickerDialog = new TimePickerDialog(getContext(),R.style.TimePickerDialogStyle , myTimeListener, hour, minute, true);
timePickerDialog.setTitle("Choose hour:");
timePickerDialog.show();
}
这就是风格:
<style name="TimePickerDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorControlActivated">@color/mcgpalette_300</item>
<item name="colorAccent">@color/mcgpalette_300</item>
</style>
如果我尝试更改样式,如下图所示,我会得到我想要的样式,但不是上面示例中的颜色。 良好风格的代码,但没有我的颜色:
TimePickerDialog timePickerDialog = new TimePickerDialog(getContext(), 2 , myTimeListener, hour, minute, true);
我的问题是:如何将样式设置为第二张图片中的样式和第一张图片中的颜色?
答案 0 :(得分:3)
如何将样式设置为第二张图片中的样式和第一张图片中的颜色?
你需要一些反思,因为没有公开的API。
无聊的东西,你可以跳过这个。
一些内部人员:
在API 21下面,第二种风格又称“微调模式”是唯一可用的风格。从API 21开始,另一个“时钟模式”可用,TimePicker
窗口小部件代表根据您选择的样式工作到内部类。
微调器模式包含多个NumberPicker
小部件。
为了实现您的需要,您需要:
NumberPicker
s。NumberPicker
s'分隔符的访问权。这是好事。
由于实际的实现是页面长,我将发布链接:
XpNumberPicker
允许更改任何NumberPicker
的分隔符(或仅分隔符颜色)。XpDatePicker
允许更改任何微调器样式DatePicker
的分隔符颜色。XpTimePicker
允许更改任何微调器样式TimePicker
的分隔符颜色。将所有这些类复制到您的项目中。
您需要ColorStateList
新分频器颜色。我会留下来取决于你。
示例:
final int color = ContextCompat.getColor(timePicker.getContext(), R.color.accent);
final ColorStateList csl = ColorStateList.valueOf(color);
XpTimePicker.setSelectionDividerTint(timePicker, csl);
捕获。
您无法访问TimePicker
中的TimePickerDialog
。
final int timePickerId = context.getResources().getIdentifier("android:id/timePicker", null, null);
final TimePicker timePicker = (TimePicker) timePickerDialog.findViewById(timePickerId);
我还没有测试过最后一点。
标题。
TimePickerDialog
扩展Dialog
使用API 21下方的Holo主题。这意味着您总是有蓝色标题,蓝色下划线。如何解决它?
timePickerDialog.setTitle(null)
完全隐藏标题。android:id/title
)并更改其文字颜色。android:id/titleDivider
)并更改其背景颜色。此ID不是公共API的一部分。android.support.v7.app.AlertDialog
TimePicker
作为素材主题。答案 1 :(得分:0)
在一天结束时,TimePickerDialog
只是一个TimePicker
的警告对话框。您可以使用其代码并使用TimePicker创建自己的AlertDialog
。这意味着您可以自定义时间选择器的任何属性。我建议你创建一个新的对话框xml并在你的自定义AlertDialog中对它进行充气。请务必使用您的布局调用setView(View view)
,如TimePickerDialog。
在此示例中,我将AM / PM文本的颜色设置为橙色。
<TimePicker xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/timePicker"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:amPmTextColor="@android:color/holo_orange_light"
android:timePickerMode="@integer/time_picker_mode" />