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