您的位置:首页 > 移动开发 > Android开发

Android应用开发常用知识

2014-07-19 15:17 330 查看

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、是否减少活动主窗口大小以便腾出空间放软键盘
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: