android使用小结(上)----2015
2015-12-30 17:31
447 查看
视图连续点击控制
之前常见的做法是重写onClickListener,这样的对当有少量view时控制有效,并且是在前期就已经有这样方面的设计;如果在项目的后期才想起对view进行控制,那就死了,那么多的view要是都重新setOnClickListener(new MyClickListener())的话,是极不可取的。所以通过对顶层焦点进行分发,则避免了这种问题。
判断是否有虚拟按键(不是输入按键!!!)
现在市面上有不少android手机都为了扩大屏幕显示比取消了物理按键,转而使用更灵活的虚拟按键。但是这样就会造成了一种现象,就是当用户设置为展示虚拟按键时,就会有可能影响现有的屏幕适配,造成显示不全的情况;所以在特定情景下,就要判断按键是否弹出,以此来进一步进行适配:
Calendar类使用注意点
. format格式中,如果小时为12小时制(hh,当只写一个h时,表示当第一位 为0时不显示,只显示非0数据;HH,24小时制,0-23点,H同理),则转成的格式是1点到12点,就会造 成凌晨0点到1点和中午12点到1点之前的混乱,使用是切记分开
. Calendar.DAY_OF_WEEK表示一周中的周几,从SUNDAY开始,马丹,关键是此值竟然是1,不是0!!!
控制EditText输入为大小写,数字等
其实思路特别简单,第一种就是先控制digits属性(android:digits=”0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLIMNOPQRSTUVWXYZ”);第二种是更改TextWatcher中的内容。
以上仅为特别简单的知识点总结,下一版会把目前使用的第三方总结一下
之前常见的做法是重写onClickListener,这样的对当有少量view时控制有效,并且是在前期就已经有这样方面的设计;如果在项目的后期才想起对view进行控制,那就死了,那么多的view要是都重新setOnClickListener(new MyClickListener())的话,是极不可取的。所以通过对顶层焦点进行分发,则避免了这种问题。
/** * 最小的点击延时时间,单位:毫秒 */ private static final long MIN_CLICK_DELAY_TIME = 500; @Override public boolean dispatchTouchEvent(MotionEvent ev) { //为了防止快速点击按钮,导致点击事件多次触发,这里判断两次点击的时间 是否在合理范围,否则直接拦截touch事件分发 if (ev.getAction() == MotionEvent.ACTION_DOWN) { long time = System.currentTimeMillis(); long delta = time - mLastClickTime; if (delta < MIN_CLICK_DELAY_TIME) { return true; } else { mLastClickTime = time; } } return super.dispatchTouchEvent(ev); }
判断是否有虚拟按键(不是输入按键!!!)
现在市面上有不少android手机都为了扩大屏幕显示比取消了物理按键,转而使用更灵活的虚拟按键。但是这样就会造成了一种现象,就是当用户设置为展示虚拟按键时,就会有可能影响现有的屏幕适配,造成显示不全的情况;所以在特定情景下,就要判断按键是否弹出,以此来进一步进行适配:
int mThreshold=100; // 适配虚拟键盘 View decoreView = getWindow().getDecorView().findViewById(android.R.id.content); decoreView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { //比较Activity根布局与当前布局的大小 //添加mIsFirst变量是为了防止多个视图重复调用 if (mIsFirst) { mIsFirst = false; int heightDiff = decoreView.getRootView().getHeight() - decoreView.getHeight(); if (heightDiff > mThreshold) { //大小超过100时,一般为显示虚拟键盘事件 //一般进行重新适配操作,如控制padding,margin等 } else { //大小小于100时,为不显示虚拟键盘或虚拟键盘隐藏 } } } }); } //为了更规范的判断mThreshold,可以更分辨率合起来使用 private int getThreshold(){ float density=getResources().getDisplayMetrics().density; return (int)45*density; }
Calendar类使用注意点
. format格式中,如果小时为12小时制(hh,当只写一个h时,表示当第一位 为0时不显示,只显示非0数据;HH,24小时制,0-23点,H同理),则转成的格式是1点到12点,就会造 成凌晨0点到1点和中午12点到1点之前的混乱,使用是切记分开
. Calendar.DAY_OF_WEEK表示一周中的周几,从SUNDAY开始,马丹,关键是此值竟然是1,不是0!!!
控制EditText输入为大小写,数字等
其实思路特别简单,第一种就是先控制digits属性(android:digits=”0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLIMNOPQRSTUVWXYZ”);第二种是更改TextWatcher中的内容。
//监听信息输入,并把字母转换成大写 private void watchEditTextChanged(EditText editText) { editText.addTextChangedListener(new TextWatcher() { String temp; @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { assert editable != null; String value = editable.toString(); if (!TextUtils.isEmpty(value) && !value.equalsIgnoreCase(temp)) { // 放在editText.setText(...)后面会造成StackOverflowError,因为每次setText都会调用afterTextChanged,造成死循环 temp = value; // 转换大写 editText.setText(value.toUpperCase()); // 光标定位到最后 editText.setSelection(editText.getText().toString().length()); } } }); }
以上仅为特别简单的知识点总结,下一版会把目前使用的第三方总结一下
相关文章推荐
- 关于genymotion 不能创建模拟器(包括安卓模拟器)的解决方法
- android获取文件getMimeType的两种方法
- Android版添加phonegap--sencha打包插件教程
- android屏幕适配建议 (一)
- 老李推荐: 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 3
- ListView的嵌套
- 【Android测试】【随笔】性能采集工具——小松鼠诞生记 (对外版)
- Android Studio安装及配置
- Android.mk详解
- 老李推荐: 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 2
- Android read write json
- 老李推荐: 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 1
- 学习Android MediaPlayer
- 源码角度深入理解Activity
- Android 权限大全
- How to play videos in android from assets folder or raw folder?
- Android MediaPlayer 播放prepareAsync called in state 8解决办法
- Android LayoutAnimation 与 LayoutTransition
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- 10个开源项目Android开发者掌握技术必学