目錄
1.簡單使用
2.指定字體顏色及大小
3.設置24小時顯示格式,當前顯示時間,禁止調起鍵盤,監聽時間改變
4.設置分割線顏色,設置NumberPicker大小
簡單顯示
<TimePicker
android:id="@+id/time_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:timePickerMode="spinner"
android:theme="@style/Theme.TimePicker">
</TimePicker>
android:theme爲指定字體顏色及大小用到的。
指定字體顏色及大小
在style文件中定義Style
<style name="Theme.TimePicker" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:editTextStyle">@style/Widget.AppCompat.EditText.Gray</item>
</style>
<style name="Widget.AppCompat.EditText.Gray">
<item name="android:textSize">18sp</item>
<item name="android:textColor">#b3b3b3</item>
</style>
指定android:theme爲定義的Style
一些設置
mTimePicker.setIs24HourView(true);//設置爲24小時顯示格式
mTimePicker.setCurrentHour(0); //當前小時
mTimePicker.setCurrentMinute(30); //當前分鐘
mTimePicker.setDescendantFocusability(DatePicker.FOCUS_BLOCK_DESCENDANTS);//設置父佈局focus,子控件不會focus,以此禁止調起鍵盤
mTimePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
long delayMills = (hourOfDay * 60 + minute) * 60 * 1000;
}
});
指定分割線divider顏色,設定Picker大小
這裏採用反射取得對應屬性進行更改
public void changeTimePickerColor() {
Resources systemResources = Resources.getSystem();
int hourNumberPickerId = systemResources.getIdentifier("hour", "id", "android");
int minuteNumberPickerId = systemResources.getIdentifier("minute", "id", "android");
NumberPicker hourNumberPicker = findViewById(hourNumberPickerId);
NumberPicker minuteNumberPicker = findViewById(minuteNumberPickerId);
setNumberPickerDivider(hourNumberPicker, Color.YELLOW);
setNumberPickerDivider(minuteNumberPicker, Color.GREEN);
setNumberpickerTextColour(hourNumberPicker, Color.RED);
setNumberpickerTextColour(minuteNumberPicker, Color.BLUE);
// setPickerSize(hourNumberPicker, 30, this);
}
//指定分割線顏色
private void setNumberPickerDivider(NumberPicker numberPicker, int color) {
try {
Field dividerFields = NumberPicker.class.getDeclaredField("mSelectionDivider");
dividerFields.setAccessible(true);
dividerFields.set(numberPicker, new ColorDrawable(color));
} catch (NoSuchFieldException | IllegalAccessException | IllegalArgumentException e) {
Log.w("setNumberPickerTxtClr", e);
}
}
//另一種指定文字顏色的方法
private void setNumberpickerTextColour(NumberPicker number_picker, int color) {
final int count = number_picker.getChildCount();
for (int i = 0; i < count; i++) {
View child = number_picker.getChildAt(i);
try {
Field wheelpaint_field = number_picker.getClass().getDeclaredField("mSelectorWheelPaint");
wheelpaint_field.setAccessible(true);
((Paint) wheelpaint_field.get(number_picker)).setColor(color);
((EditText) child).setTextColor(color);
number_picker.invalidate();
} catch (NoSuchFieldException | IllegalAccessException | IllegalArgumentException e) {
Log.i("setNumberPickerTxtClr", "set_numberpicker_text_colour: "+e);
}
}
}
//指定NumberPicker大小 改的NumberPicker和NumberPicker的寬度值
private static void setPickerSize(NumberPicker np, int widthDpValue,Context context) {
int widthPxValue = ToolUtils.dp2px(context, widthDpValue);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(widthPxValue, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(0, 0, 0, 0);
np.setLayoutParams(params);
}