2

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

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

回答

0

在一天结束时,TimePickerDialog只是一个警告对话,其中TimePicker。您可以使用它的代码并使用TimePicker创建您自己的AlertDialog。这意味着您可以自定义时间选择器的任何属性。我建议你创建一个新的对话框xml并在你的自定义AlertDialog中充气。确保使用TimePickerDialog中的布局调用setView(View view)

在此示例中,我已将AM/PM文本的颜色设置为橙色。

​​
+0

'amPmTextColor'不影响微调模式,并在API 21中引入。 –

3

我如何设置的样式是作为第二图像和颜色,在第一张照片?

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

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

一些内部:

  • 低于API 21第二风格又名 “微调模式” 是唯一可用的风格。由于API 21提供了另一种“时钟模式”,并且TimePicker窗口小部件根据您选择的风格将工作委托给内部类。

  • 微调模式由几个NumberPicker微件组成。

为了达到你想要什么,你需要:

  1. 检查,如果你是在API 21岁或以上的API 21和使用微调模式(实现时钟的类名和微调代表打开API 21,aah)。
  2. 获得访问所有的NumberPicker s。
  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)完全隐藏标题。
  • 手动方式。
    • 找到标题视图(android:id/title)并更改其文本颜色。
    • 找到分隔线视图(android:id/titleDivider)并更改其背景颜色。此ID不是公共API的一部分。
    • 如果对话框标题布局不是默认的Holo,它可能没有这些视图!
  • 对于AppCOmpat库提供的所有平台上的材质主题,使用android.support.v7.app.AlertDialogTimePicker