线性布局如何同时添加OnTouchListener和OnClickListener?
How to Add OnTouchListener and OnClickListener at a time in Linear Layout?
如何在 LinearLayout
中同时添加事件 OnTouchListener
和 OnclickListener
?
这是我的代码,但不起作用
final LinearLayout llTimeTable=(LinearLayout) findViewById(R.id.llSehriIftar);
llTimeTable.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Ramadandate.class);
startActivity(intent);
}
});
llTimeTable.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
llTimeTable.setBackgroundColor(Color.rgb(51, 51, 255));
break;
case MotionEvent.ACTION_UP:
// set color back to default
llTimeTable.setBackgroundColor(Color.rgb(76, 106, 225));
break;
}
return true;
}
});
但是,当我只使用 OnclickListener
时它有效,而当我仅使用 onTouch
方法时它有效,但两者同时无效。
由于触摸事件更通用,它首先被调用,然后 onClick
被触发,但是,由于您的 onTouch returns 为真,事件被消耗并且 onClick
是从未达到。
只需将 onTouch
更改为 return false
即可调用您的 onClick。
llTimeTable.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//Your code.......
return false;
}
});
确保 return 在 TouchListener
中设置为 false,因为如果 return 为 true 则该事件将不会传递给其他侦听器。
如何在 LinearLayout
中同时添加事件 OnTouchListener
和 OnclickListener
?
这是我的代码,但不起作用
final LinearLayout llTimeTable=(LinearLayout) findViewById(R.id.llSehriIftar);
llTimeTable.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Ramadandate.class);
startActivity(intent);
}
});
llTimeTable.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
llTimeTable.setBackgroundColor(Color.rgb(51, 51, 255));
break;
case MotionEvent.ACTION_UP:
// set color back to default
llTimeTable.setBackgroundColor(Color.rgb(76, 106, 225));
break;
}
return true;
}
});
但是,当我只使用 OnclickListener
时它有效,而当我仅使用 onTouch
方法时它有效,但两者同时无效。
由于触摸事件更通用,它首先被调用,然后 onClick
被触发,但是,由于您的 onTouch returns 为真,事件被消耗并且 onClick
是从未达到。
只需将 onTouch
更改为 return false
即可调用您的 onClick。
llTimeTable.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//Your code.......
return false;
}
});
确保 return 在 TouchListener
中设置为 false,因为如果 return 为 true 则该事件将不会传递给其他侦听器。