diff --git a/app/src/main/java/com/ik/mboxlauncher/view/CustomRecyclerViewer.java b/app/src/main/java/com/ik/mboxlauncher/view/CustomRecyclerViewer.java index 4a79719..8a35fcc 100644 --- a/app/src/main/java/com/ik/mboxlauncher/view/CustomRecyclerViewer.java +++ b/app/src/main/java/com/ik/mboxlauncher/view/CustomRecyclerViewer.java @@ -6,6 +6,7 @@ import android.content.res.TypedArray; import android.graphics.Rect; import android.util.AttributeSet; import android.util.Log; +import android.view.FocusFinder; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; @@ -227,7 +228,7 @@ public class CustomRecyclerViewer extends RecyclerView { public boolean dispatchKeyEvent(KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { -// int keyCode = event.getKeyCode(); + int keyCode = event.getKeyCode(); // if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN || keyCode == KeyEvent.KEYCODE_DPAD_UP) { // long current = System.currentTimeMillis(); // boolean res; @@ -240,34 +241,42 @@ public class CustomRecyclerViewer extends RecyclerView { // return res; // } // + if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN || keyCode == KeyEvent.KEYCODE_DPAD_UP) { -// View focusedView = getFocusedChild(); // 获取当前获得焦点的view -// View nextFocusView; -// try { -// if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { -// // 通过findNextFocus获取下一个需要得到焦点的view -// nextFocusView = FocusFinder.getInstance().findNextFocus(this, focusedView, View.FOCUS_DOWN); -// } else { -// // 通过findNextFocus获取下一个需要得到焦点的view -// nextFocusView = FocusFinder.getInstance().findNextFocus(this, focusedView, View.FOCUS_UP); -// } -// -// -// LogUtils.loge("nextFocusView===>"+nextFocusView); -// -// } catch (Exception e) { -// nextFocusView = null; -// } -// -// // 如果获取失败(也就是说需要交给系统来处理焦点, 消耗掉事件,不让系统处理, 并让先前获取焦点的view获取焦点) -// if (nextFocusView == null) { -// focusedView.requestFocus(); -// return true; -// -// } + + View focusedView = getFocusedChild(); // 获取当前获得焦点的view + View nextFocusView; + try { + if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { + // 通过findNextFocus获取下一个需要得到焦点的view + nextFocusView = FocusFinder.getInstance().findNextFocus(this, focusedView, View.FOCUS_DOWN); + } else { + // 通过findNextFocus获取下一个需要得到焦点的view + nextFocusView = FocusFinder.getInstance().findNextFocus(this, focusedView, View.FOCUS_UP); + } + + + LogUtils.loge("nextFocusView===>" + nextFocusView); + + } catch (Exception e) { + nextFocusView = null; + } + + // 如果获取失败(也就是说需要交给系统来处理焦点, 消耗掉事件,不让系统处理, 并让先前获取焦点的view获取焦点) + if (nextFocusView == null) { + if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { + focusedView.requestFocus(View.FOCUS_DOWN); + } + if (keyCode == KeyEvent.KEYCODE_DPAD_UP) { + focusedView.requestFocus(View.FOCUS_UP); + } + return true; + + } // } -// } } +// } + } return super.dispatchKeyEvent(event); }