安卓Timpicker样式修改、多版本适配、ScrollView滑动冲突
时间:2022-06-17
本文章向大家介绍安卓Timpicker样式修改、多版本适配、ScrollView滑动冲突,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一 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;
}
}
- rsync同步时,删除目标目录比源目录多余文件的方法(--delete)
- 近期一枚“大文娱”dawenyu.com域名以小六位价格易主
- 分布式监控系统Zabbix-3.0.3-完整安装记录(0)
- URL安全的Base64编码
- 温故而知新:设计模式之原型模式(Prototype)
- Windows 7上执行Cake 报错原因是Powershell 版本问题
- 温故而知新:类索引器
- Visual Studio Code 代理设置
- 温故而知新:设计模式之工厂模式(Factory)
- 通过Jexus 部署 dotnetcore版本MusicStore 示例程序
- jquery.mobile手机网页简要
- 跟张志东深聊腾讯的“进化力”
- 详解微信小程序如何实现流程进度功能
- silverlight:如何在图片上挖个洞?
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- ShardingJdbc分库分表实战案例解析(下)
- 分布式链路追踪Skywalking Skywalking 存储客户端设计
- Kubernetes 的新武器:层级命名空间
- 手撕distributed ram类型同步FIFO
- 解决PIL透明的图片放在新图片上报错
- Dissonance 使用(一)
- Dissonance 使用(三)
- 从代码角度看各类子域名收集工具
- Shiro-550 PoC 编写日记
- k8s代码走读---client-go编程交互基础
- 故障恢复:一次底层超融合故障导致的异常处理
- JavaSE语法
- 链表:听说过两天反转链表又写不出来了?
- 汇总:MySQL 8.0 运维便捷命令
- 链表:一道题目考察了常见的五个操作!