Android
레이아웃과 포커싱
Birthmark
2021. 1. 20. 11:29
descendantFocusability - Child View의 Focus를 제어하자
descendantFocusability Child View의 Focus를 제어하자 ㆍ 시작하기 전에 descendantfocusablility라는 이 속성은 몇몇 특별한 상황에서 필요합니다. ㆍ 물론 사용하는 방법에 따라 유용하게 쓰일수도 있습니다..
itpangpang.xyz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | @Override public boolean onKeyUp(int keyCode, KeyEvent event){ // listView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); if(keyCode == KeyEvent.KEYCODE_F3){ button_ok.performClick(); } else if(keyCode == KeyEvent.KEYCODE_BACK){ finish(); } return false; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // listView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); final int firstListItemPosition = listView.getFirstVisiblePosition(); final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1; switch (keyCode) { case KeyEvent.KEYCODE_F1: //KEYCODE_DPAD_UP mPosition--; if (mPosition < firstListItemPosition || mPosition > lastListItemPosition) { if (mPosition < 0) { //インデックスを外れた場合 if (firstListItemPosition != 0) { mPosition = lastListItemPosition; } else mPosition = 0; } else { mPosition = lastListItemPosition; } } int childIndex = mPosition - firstListItemPosition; listView.getChildAt(childIndex).requestFocusFromTouch(); listView.setSelectionFromTop(mPosition, 340); firstFocus = false; return true; case KeyEvent.KEYCODE_F2: //KEYCODE_DPAD_DOWN if (firstFocus) { listView.getChildAt(0).requestFocusFromTouch(); listView.setSelectionFromTop(0, 10); firstFocus = false; } else { mPosition++; if (mPosition < firstListItemPosition || mPosition > lastListItemPosition) { //最大インデックスを超えると if (mPosition > listView.getCount() - 1) { //ラストアイテムがフォーカスされた状態でスクロールする場合 if (lastListItemPosition != listView.getCount() - 1) { //画面上で一番上のアイテムを取得 mPosition = firstListItemPosition; } else //最大インデックス値を固定 mPosition = listView.getCount() - 1; } else { mPosition = firstListItemPosition; } } childIndex = mPosition - firstListItemPosition; listView.getChildAt(childIndex).requestFocusFromTouch(); listView.setSelectionFromTop(mPosition, 340); } return true; case KeyEvent.KEYCODE_BACK: return true; default: break; } return false; } | cs |