安卓Timpicker样式修改、多版本适配、ScrollView滑动冲突
2016-07-20 14:57
686 查看
一 Timepicker 使用方法
1、初始化2、设置代码
private void setTimePicker(int hour,int minute) { //设置24小时制 timePicker_clock.setIs24HourView(true); realHour = hour; realMinute = minute; //设置小时 timePicker_clock.setCurrentHour(hour); //设置分钟 timePicker_clock.setCurrentMinute(minute); //设置滑动监听 timePicker_clock.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() { @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { realHour = hourOfDay; realMinute = minute; } }); }
二 Timepicker修改样式
private void setNumberPickerTextColor(ViewGroup viewGroup) { List<NumberPicker> npList = findNumberPicker(viewGroup); if (null != npList) { for (NumberPicker np : npList) { setNumberPickerTextColor(np, Color.BLACK); } } }
public static boolean setNumberPickerTextColor(NumberPicker numberPicker, int color) { final int count = numberPicker.getChildCount(); for (int i = 0; i < count; i++) { View child = numberPicker.getChildAt(i); if (child instanceof EditText) { try { Field selectorWheelPaintField = numberPicker.getClass().getDeclaredField("mSelectorWheelPaint"); selectorWheelPaintField.setAccessible(true); ((Paint) selectorWheelPaintField.get(numberPicker)).setColor(color); ((EditText) child).setTextColor(color); numberPicker.invalidate(); return true; } catch (NoSuchFieldException e) { Log.w("setNumberPicker", e); } catch (IllegalAccessException e) { Log.w("setNumberPicker", e); } catch (IllegalArgumentException e) { Log.w("setNumberPicker", e); } } } return false; }
三 多版本适配
先看一下安卓4.4、5.1、6.0 的系统时钟样式系统时钟在不同版本上样式不一样 而且很多童鞋会遇到在布局里面更改numberColor没效果 为了满足需求 只能更改主题样式
<style name="Theme.picker" parent="android:Theme.Holo.Light"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style>
这样我们的所有系统出来的效果就都统一了
四 ScrollView 嵌套 Timeicker
两个都能滑动 所以我们需要解决滑动冲突@Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) { ViewParent p = getParent(); if (p != null) p.requestDisallowInterceptTouchEvent(true); } return false; }
附自定义Timepicker代码
package com.cavytech.widget;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.NumberPicker;
import android.widget.TimePicker;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
/**
* Created by libin on 4/18 0018.
* 邮箱:bin.li@tunshu.com
*/
public class ScrollViewTimePacker extends TimePicker {
public ScrollViewTimePacker(Context context) {
super(context);
setNumberPickerTextColor(this);
}
public ScrollViewTimePacker(Context context, AttributeSet attrs) {
super(context, attrs);
setNumberPickerTextColor(this);
}
public ScrollViewTimePacker(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) { ViewParent p = getParent(); if (p != null) p.requestDisallowInterceptTouchEvent(true); } return false; }
private List<NumberPicker> findNumberPicker(ViewGroup viewGroup) {
List<NumberPicker> npList = new ArrayList<NumberPicker>();
View child = null;
if (null != viewGroup) {
for (int i = 0; i < viewGroup.getChildCount(); i++) {
child = viewGroup.getChildAt(i);
if (child instanceof NumberPicker) {
npList.add((NumberPicker) child);
} else if (child instanceof LinearLayout) {
List<NumberPicker> result = findNumberPicker((ViewGroup) child);
if (result.size() > 0) {
return result;
}
}
}
}
return npList;
}
private void setNumberPickerTextColor(ViewGroup viewGroup) { List<NumberPicker> npList = findNumberPicker(viewGroup); if (null != npList) { for (NumberPicker np : npList) { setNumberPickerTextColor(np, Color.BLACK); } } }
public static boolean setNumberPickerTextColor(NumberPicker numberPicker, int color) { final int count = numberPicker.getChildCount(); for (int i = 0; i < count; i++) { View child = numberPicker.getChildAt(i); if (child instanceof EditText) { try { Field selectorWheelPaintField = numberPicker.getClass().getDeclaredField("mSelectorWheelPaint"); selectorWheelPaintField.setAccessible(true); ((Paint) selectorWheelPaintField.get(numberPicker)).setColor(color); ((EditText) child).setTextColor(color); numberPicker.invalidate(); return true; } catch (NoSuchFieldException e) { Log.w("setNumberPicker", e); } catch (IllegalAccessException e) { Log.w("setNumberPicker", e); } catch (IllegalArgumentException e) { Log.w("setNumberPicker", e); } } } return false; }
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories