1. 程式人生 > >[Android]一些細節注意點和程式碼

[Android]一些細節注意點和程式碼

隨時更新一些編寫應用中遇到的細節注意點

  • 1 . 對返回鍵的處理,如實現長按返回鍵退出:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        Toast.makeText(this, "長按返回鍵退出", Toast.LENGTH_SHORT).show();
    } else if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 2) {
        //do something else
        System.exit(0);
    }
    return false;
}

一些鍵(MediaKey,BackKey)在系統分發時,做了特殊處理:當按下時,傳送Message去呼叫KeyEvent.changeTimeRepeat。長按時會發多次呼叫DOWN。經過對event.getRepeatCount()==0的判斷,可以避免長按多次呼叫onKeyDown

  • 2. 使用DialogFragment需要注意,當使用setStyle方法設定DialogFragment的顯示尺寸時,會丟失Fragment的View的根佈局(root),所以需要將xml佈局檔案外再套一層wrap_content的根佈局

  • 3. 一個匹配100000以內實數(小說點後一位、兩位的浮點數或者整數)或者以小數點為結尾的字串 = ^(\d){1,5}(.([0-9]|\d[0-9]){0,1})?$ 其中{1,5}的數字意味著最小1位最大5位數字,可以根據需要自行更換。其中{0,1}的數字意味著可以有小數點也可以不要小數點

  • 4. RecyclerView在區域性重新整理時入呼叫notifyItemRangeChanged等方法時必須給Adapter重寫getItemId方法,原因是Adapter會呼叫該方法將Item和position繫結起來,如果沒有重寫會導致複用的Item沒有呼叫onBindViewHolder方法進而無法更新資料

  • 5. ViewPager中新增View的高度必須確定,否則會導致View顯示不全的問題,不能使用match_parent或者wrap_content

  • 6. 手指點選和鍵盤OK鍵點選都會觸發OnClick事件,但是這兩種觸發方式的觸發起點是不同的,手指點選是通過dispatchTouchEvent傳遞下去的,而鍵盤OK鍵是通過dispatchKeyEvent傳遞下去的。同時需要了解,dispatchKeyEvent事件會判斷當前螢幕中是否有聚有焦點(hasFocuse)的View存在,如果不存在則不會繼續走onKeyDown事件

  • 6. 設定ViewGroup(ListView或RecyclerView)完全展開的程式碼:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec
            , MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST));
}