0

(Android 3.2)我有一个带有 9 个按钮的 TableLayout。我想知道它们中的任何一个何时未按下,即按下完成时,即 ACTION_UP。我不在乎哪个按钮,我只想知道任何被按下的按钮何时刚刚被释放。

我希望 XML 中有一个Android::onTouch,就像有一个 Android::onClick 一样,我可以将它们全部指向一个 onTouch 事件处理程序以查找 ACTION_UP。但是没有。我试图避免编写 9 个单独的 OnTouchListener。

有什么建议么?

提前致谢。

4

3 回答 3

2

你为什么不从代码中添加onTouchListener,事实上,当你有ACTION_UP时做你想做的事,如此处所示

于 2012-04-20T21:47:00.827 回答
2

为什么不只创建一个监听器:

OnTouchListener listener = new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Button b = (Button) v; // the button that just gets released
        if (event.getAction() == MotionEvent.ACTION_UP) {
            ...
        }
    }
});

并使用循环附加到所有按钮:

Button buttons[] = {...};
for (Button b : buttons) {
    b.setOnTouchListener(listener);
}

或者:

int button_ids[] = {R.id.button1, R.id.button2, R.id.button3, ...};
for (int id : button_ids) {
    ((Button) findViewById(id)).setOnTouchListener(listener);
}
于 2012-04-20T21:50:43.390 回答
2

您可以通过编程方式而不是在 XML 中将每个视图分配给单个 onTouch 侦听器。

做一个听众:

private View.OnTouchListener myListener = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        // Your logic            
        return false;
    }
};

然后将其添加到每个按钮。

findViewById(R.id.btn1).setOnTouchListner(myListener);
findViewById(R.id.btn2).setOnTouchListner(myListener);

理想情况下,您可以以编程方式创建这些按钮,而不是从 xml 中引用它们,这样您就可以在循环中执行此操作,或者可能将它们放在一个 ViewGroup 中并迭代其子项并以这种方式添加侦听器。

于 2012-04-20T21:51:54.780 回答