onKeyListener 和 onScrollListener
onKeyListener with onScrollListener
真的不确定我是否理解这个或者可能是错误的。我有一个 gridlayout(单元格是文本视图)包裹在垂直滚动条内的水平滚动条内。我正在使用方向键在网格中导航。这很有效,当我按下右箭头键时,网格单元会按预期从左向右移动,并在按下左箭头键时从右向左移动。我在网格的每个 textView 上添加了一个 onKeylistener,当我在网格上滚动时,我正在改变颜色背景。问题是 onKeyListener 显然接管了网格的控制。向右滚动用于更改颜色,但单元格不再在网格上移动。一旦我到达最后一个可见的列,焦点就会继续离开屏幕,但单元格会离开屏幕。有没有办法在 onkey 事件中实现滚动,以便单元格移动并且我可以控制单元格的属性?还是有完全不同的方法来完成这项工作?
主要成分是
textViewD.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if(keyEvent.getAction()==KeyEvent.ACTION_DOWN && i == KeyEvent.KEYCODE_DPAD_RIGHT) {
gridLayoutE.getChildAt(childIndex[0]).setBackgroundColor(Color.BLACK);
gridLayoutE.getChildAt(childIndex[0] + 1).setBackgroundColor(Color.GREEN);
childIndex[0] = childIndex[0] + 1;
gridLayoutE.requestFocus();
return true;
}
return false;
}
滚动监听器,我有一个 class 扩展水平滚动,以便让我的 header table 与我的网格一起滚动。这行得通。
@Override
public void onScrollChanged (ObservableScrollView scrollView,int x, int y, int oldx, int oldy){
if (scrollView == hsvHeader) {
hsvBody.scrollTo(x, y);
} else if (scrollView == hsvBody) {
hsvHeader.scrollTo(x, y);
}
}
我能够通过使用 dispatchKeyEvent(KeyEvent event) 找到解决我的问题的方法。我最终得到了类似
的东西
public boolean dispatchKeyEvent(KeyEvent event) {
mcols= mcols + 1;
if(event.getAction()==KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) {
gridLayoutE.getFocusedChild().setBackgroundColor(Color.BLACK);
gridLayoutE.findViewById(mcol).setBackgroundColor(Color.GREEN);
}
return super.dispatchKeyEvent(event);
}
这与我的 scrolllistener 一起,允许我滚动网格并像我一样更改每个单元格。
真的不确定我是否理解这个或者可能是错误的。我有一个 gridlayout(单元格是文本视图)包裹在垂直滚动条内的水平滚动条内。我正在使用方向键在网格中导航。这很有效,当我按下右箭头键时,网格单元会按预期从左向右移动,并在按下左箭头键时从右向左移动。我在网格的每个 textView 上添加了一个 onKeylistener,当我在网格上滚动时,我正在改变颜色背景。问题是 onKeyListener 显然接管了网格的控制。向右滚动用于更改颜色,但单元格不再在网格上移动。一旦我到达最后一个可见的列,焦点就会继续离开屏幕,但单元格会离开屏幕。有没有办法在 onkey 事件中实现滚动,以便单元格移动并且我可以控制单元格的属性?还是有完全不同的方法来完成这项工作?
主要成分是
textViewD.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if(keyEvent.getAction()==KeyEvent.ACTION_DOWN && i == KeyEvent.KEYCODE_DPAD_RIGHT) {
gridLayoutE.getChildAt(childIndex[0]).setBackgroundColor(Color.BLACK);
gridLayoutE.getChildAt(childIndex[0] + 1).setBackgroundColor(Color.GREEN);
childIndex[0] = childIndex[0] + 1;
gridLayoutE.requestFocus();
return true;
}
return false;
}
滚动监听器,我有一个 class 扩展水平滚动,以便让我的 header table 与我的网格一起滚动。这行得通。
@Override
public void onScrollChanged (ObservableScrollView scrollView,int x, int y, int oldx, int oldy){
if (scrollView == hsvHeader) {
hsvBody.scrollTo(x, y);
} else if (scrollView == hsvBody) {
hsvHeader.scrollTo(x, y);
}
}
我能够通过使用 dispatchKeyEvent(KeyEvent event) 找到解决我的问题的方法。我最终得到了类似
的东西 public boolean dispatchKeyEvent(KeyEvent event) {
mcols= mcols + 1;
if(event.getAction()==KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) {
gridLayoutE.getFocusedChild().setBackgroundColor(Color.BLACK);
gridLayoutE.findViewById(mcol).setBackgroundColor(Color.GREEN);
}
return super.dispatchKeyEvent(event);
}
这与我的 scrolllistener 一起,允许我滚动网格并像我一样更改每个单元格。