zoukankan      html  css  js  c++  java
  • Android应用开发经常使用知识

    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>

    12、Handler.removeCallbacksAndMessages(null)

    在使用Handler中,假设Activity退出之后我们不再须要发送消息或者运行Runnable,那么就要在onDestory中运行这段代码。否则可能会引起报错。由于可能在onDestory之后才会这些Handler发出的动作。




  • 相关阅读:
    @SerializedName注解
    信号量与互斥锁
    MySQL分配角色权限
    PO、VO、DAO、BO、POJO
    Java工程为什么要加一个biz层
    Java学习之强引用,弱引用,软引用 与 JVM
    深入Activity,Activity启动模式LaunchMode完全解析
    活体检测
    遥感图像数据集
    NNIE(待尝试)
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7084481.html
Copyright © 2011-2022 走看看