任何方式来判断布局中的任何按钮何时被UN压缩

时间:2012-04-20 21:35:34

标签: android

(Android 3.2)我有一个带有9个按钮的TableLayout。我想知道什么时候没有按下它们,即当按下完成时,即ACTION_UP。我不关心哪个按钮,我只想知道任何按下的按钮刚刚被释放。

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

有什么建议吗?

提前致谢。

3 个答案:

答案 0 :(得分:2)

为什么不从代码中添加onTouchListener,实际上,当你有ACTION_UP时,你要做你想做的事情,如here

答案 1 :(得分: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);
}

答案 2 :(得分: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中并迭代其子项并以这种方式添加侦听器。