TimePickerDialog具有旧样式和不同的颜色

时间:2016-12-05 20:59:35

标签: android android-styles android-timepicker timepickerdialog

我创建了一个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看起来像是: enter image description here

如果我尝试更改样式,如下图所示,我会得到我想要的样式,但不是上面示例中的颜色。 良好风格的代码,但没有我的颜色:

TimePickerDialog timePickerDialog = new TimePickerDialog(getContext(), 2 , myTimeListener, hour, minute, true);

enter image description here

我的问题是:如何将样式设置为第二张图片中的样式和第一张图片中的颜色?

2 个答案:

答案 0 :(得分:3)

  

如何将样式设置为第二张图片中的样式和第一张图片中的颜色?

你需要一些反思,因为没有公开的API。

无聊的东西,你可以跳过这个。

一些内部人员:

  • 在API 21下面,第二种风格又称“微调模式”是唯一可用的风格。从API 21开始,另一个“时钟模式”可用,TimePicker窗口小部件代表根据您选择的样式工作到内部类。

  • 微调器模式包含多个NumberPicker小部件。

为了实现您的需要,您需要:

  1. 检查您是否在API 21或API 21下并使用微调器模式(并实现时钟和微调代理的类名在API 21上打开,aah)。
  2. 访问所有NumberPicker s。
  3. 获取对这些NumberPicker s'分隔符的访问权。
  4. 用新颜色为分隔线绘制色彩。
  5. 这是好事。

    由于实际的实现是页面长,我将发布链接:

    • 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的一部分。
      • 如果对话框标题布局不是默认的Holo,则可能没有这些视图!
    • 在AppCOmpat库提供的所有平台上,使用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" />