真的不确定我是否理解这一点,或者说错了。我有一个gridlayout(单元格是textview)包裹在一个垂直滚动内部的水平滚动内。我正在使用Dpad在网格中导航。这很有效,当我按下右箭头键时,网格单元格按预期从左向右移动,并在按下左箭头键的同时从右向左移动。我添加了一个onKeylistener附加到网格的每个textView,当我滚动网格我正在改变颜色背景。问题是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;
}
scrolllistener,我有一个扩展horizontalscroll的类,以便让我的标题表与我的网格一起滚动。这很有效。
@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);
}
}
答案 0 :(得分:0)
我能够通过使用dispatchKeyEvent(KeyEvent事件)找到我的问题的解决方案。我最终得到了像
这样的东西 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一起,允许我滚动网格并像我一样更改每个单元格。