gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 08:30:57 27 4
gpt4 key购买 nike

我创建了一个 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

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

最佳答案

How can I set the style to be as in the second picture and the color as in the first picture?

您需要反射(reflection)一下,因为没有公共(public) API。

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

一些内部结构:

  • 在 API 21 之后,第二种样式又名“微调器模式”是唯一可用的样式。自 API 21 以来,另一种“时钟模式”可用,TimePicker 小部件根据您选择的样式将工作委托(delegate)给内部类。

  • 微调器模式由多个 NumberPicker 小部件组成。

为了实现你想要的,你需要:

  1. 检查您是低于 API 21 还是高于 API 21,并使用微调器模式(并意识到时钟和微调器委托(delegate)的类名已在 API 21 上切换,啊啊)。
  2. 获得对所有 NumberPicker 的访问权。
  3. 获得对这些 NumberPicker 的分隔符的访问权限。
  4. 使用新颜色为分隔线可绘制对象着色。

这是好东西。

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

  • 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);

收获。

您无权从 TimePickerDialog 访问 TimePicker

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) 完全隐藏标题。
  • 手动方法。
    • 找到标题 View (android:id/title) 并更改其文本颜色。
    • 找到分隔 View (android:id/titleDivider) 并更改其背景 颜色。此 ID 不是公共(public) API 的一部分。
    • 如果对话框标题布局不是默认的 Holo,它可能没有这些 View !
  • 在 AppCOmpat 库提供的所有平台上使用 android.support.v7.app.AlertDialogTimePicker 作为 Material 主题。

关于android - 具有旧样式和不同颜色的 TimePickerDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40983235/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com