Android应用开发常用知识
来源:互联网 发布:淘宝联盟推广位 编辑:程序博客网 时间:2024/05/18 01:44
1、最近打开的应用不在最近任务列表中显示
android:excludeFromRecents="true"
设置为true,则排除在最近任务列表之外,不在最近任务列表中显示
2、判断一个一个String str 是否为NULL或者是否为空字符串
TextUtils.isEmpty(str)
3、android:imeOptions="actionSearch|flagNoFullscreen"的用法
在做一个把EditText放到到ActionBar中作为搜索框的功能时,设置EditText的属性为android:imeOptions="actionSearch",会遇到一个问题,当在横屏时,EditText的宽度会填充掉屏幕上除了软键盘之外的地方,与需求不符,改为android:imeOptions="actionSearch|flagNoFullscreen"后就OK了。
4、改变图片亮度的方法
1、使用image.setColorFilter(Color.GRAY,PorterDuff.Mode.MULTIPLY);可以使图片变暗,然后使用image.clearColorFilter();清除滤镜,恢复到原来的亮度;
2、使用
int brightness = -80;
ColorMatrix matrix = new ColorMatrix();
matrix.set(new float[] { 1, 0, 0, 0, brightness, 0, 1, 0, 0,
brightness, 0, 0, 1, 0, brightness, 0, 0, 0, 1, 0 });
v.setColorFilter(new ColorMatrixColorFilter(matrix));
但这种方法会使颜色不太正常,图片留有黑边;
5、用Handler来实现有时间间隔事件的判断
看到Android中GestureDetector.java是用下面代码实现手势的单击和双击判断的:
public boolean onTouchEvent(MotionEvent ev) {…… case MotionEvent.ACTION_DOWN: if (mDoubleTapListener != null) { boolean hadTapMessage = mHandler.hasMessages(TAP); if (hadTapMessage) mHandler.removeMessages(TAP); if ((mCurrentDownEvent != null) && (mPreviousUpEvent != null) && hadTapMessage && isConsideredDoubleTap(mCurrentDownEvent, mPreviousUpEvent, ev)) { // This is a second tap mIsDoubleTapping = true; // Give a callback with the first tap of the double-tap handled |= mDoubleTapListener.onDoubleTap(mCurrentDownEvent); // Give a callback with down event of the double-tap handled |= mDoubleTapListener.onDoubleTapEvent(ev); } else { // This is a first tap mHandler.sendEmptyMessageDelayed(TAP, DOUBLE_TAP_TIMEOUT); } }……} private boolean isConsideredDoubleTap(MotionEvent firstDown, MotionEvent firstUp, MotionEvent secondDown) { if (!mAlwaysInBiggerTapRegion) { return false; } final long deltaTime = secondDown.getEventTime() - firstUp.getEventTime(); if (deltaTime > DOUBLE_TAP_TIMEOUT || deltaTime < DOUBLE_TAP_MIN_TIME) { return false; } int deltaX = (int) firstDown.getX() - (int) secondDown.getX(); int deltaY = (int) firstDown.getY() - (int) secondDown.getY(); return (deltaX * deltaX + deltaY * deltaY < mDoubleTapSlopSquare); } private class GestureHandler extends Handler { GestureHandler() { super(); } GestureHandler(Handler handler) { super(handler.getLooper()); } @Override public void handleMessage(Message msg) { switch (msg.what) { case SHOW_PRESS: mListener.onShowPress(mCurrentDownEvent); break; case LONG_PRESS: dispatchLongPress(); break; case TAP: // If the user's finger is still down, do not count it as a tap if (mDoubleTapListener != null) { if (!mStillDown) { mDoubleTapListener.onSingleTapConfirmed(mCurrentDownEvent); } else { mDeferConfirmSingleTap = true; } } break; default: throw new RuntimeException("Unknown message " + msg); //never } }
具体可以参考源码,这里是妙用了mHandler.sendEmptyMessageDelayed,如果在DOUBLE_TAP_TIMEOUT时间内mHandler把TAP消息发送出去了,就是单击时间,如果在这个时间内没有发送出去,就是双击事件。
6、ImageView的setImageResources方法
ImageView的setImageResources方法不仅可以接受drawable的资源,还可以接受color资源:
imageView.setImageResource(R.drawable.XX);imageView.setImageResource(R.color.XX);
7、android:addStatesFromChildren
属性说明该viewgroup的drawable属性是否把它的子类的drawable的state包含进来.测试中linearlayout如果不包含该属性(false),当子widget被点击时不会出现被选中的状态。也就是子类的state不会被传递给父类了。比如要实现一个LinearLayout中包含一个TextView和一个EditText,在用户点的时候实现焦点的效果。将android:addStatesFromChildren设为true,当组中的EditText或是Button获取焦点时,将Layout的Background设置成相应EditText或的Button的Drawable ,这样看上去该linear中的view是一个整体。
8、android:descendantFocusability
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
9、手机息屏控制
PowerManager pm = (PowerManager) mActivity.getSystemService(Context.POWER_SERVICE);WakeLock mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK,TAG);mWakeLock.acquire();//做你想做的时。。。mWakeLock.release();
newWakeLock的第一个参数有三种不同选择:
PowerManager.PARTIAL_WAKE_LOCK
PowerManager.SCREEN_DIM_WAKE_LOCK
PowerManager.SCREEN_BRIGHT_WAKE_LOCK
10、android:windowSoftInputMode
1、当有焦点产生时,软键盘是隐藏还是显示
2、是否减少活动主窗口大小以便腾出空间放软键盘
11、RelativeLayout 实现类似 LinearLayout layout_weight 的效果:
<TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:text="Test1" android:background="@android:color/holo_blue_light" android:textSize="16dp"/> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_toEndOf="@id/text1" android:text="Test2" android:background="@android:color/holo_red_light" android:textSize="16dp"/></RelativeLayout>
- Android应用开发常用知识
- Android应用开发常用知识
- Android应用开发常用知识(2)
- android应用开发常用知识总结
- Android应用开发常用知识(3)
- Android应用开发常用知识(4)
- Android应用开发常用知识-ActionBar相关(5)
- 浏览器应用开发常用知识
- Android应用调试常用知识
- Android开发常用知识总结
- androidの常用基础应用知识总结
- Android应用调试常用知识(2)
- Android开发中常用小知识
- android应用开发常用工具包
- Android应用开发零碎知识整理
- 开发Android移动应用必备知识
- struts 提供的标签iterator,开发应用常用知识
- vc开发常用知识
- 黑马程序员_工欲善其事必先利其器
- Windows 超级终端设置
- You don't have permission to access
- 用C++的fstream实现文件拷贝的简单方法
- 安防布线的一些常见问题。
- Android应用开发常用知识
- JDBC 时间问题
- linux文件共享(samba)
- c++中double转换成string型(浮点数的格式化)
- [持续更新]我有特别的C++技巧之拷贝赋值操作符
- myeclipse包的层数和package的层数不一致
- hibernate访问数据库的几种方式
- 康托展开
- 网络设备集线器、交换机、路由器的理解