ฉันมีปัญหากับปุ่มของฉันอยู่ในสถานะไฮไลต์หลังจากทำสิ่งต่อไปนี้:
public class MainActivity extends AppCompatActivity {
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AppCompatButton button = (AppCompatButton) findViewById(R.id.mybutton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Test", "calling onClick");
}
});
button.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
v.getBackground().setColorFilter(0xe0f47521,PorterDuff.Mode.SRC_ATOP);
v.invalidate();
break;
}
case MotionEvent.ACTION_UP: {
v.getBackground().clearColorFilter();
v.invalidate();
v.performClick();
Log.d("Test", "Performing click");
return true;
}
}
return false;
}
});
}
}
เกี่ยวกับรหัสด้านบนเมื่อใช้งานฉันคาดหวังว่าการคลิกปุ่มจะได้รับการจัดการโดยการสัมผัสและการคืนค่า "จริง" การจัดการควรหยุดที่ touchListener
แต่นี่ไม่ใช่กรณี ปุ่มยังคงอยู่ในสถานะที่ถูกเน้นแม้ว่าการคลิกจะถูกเรียก
สิ่งที่ฉันได้รับคือ:
Test - calling onClick
Test - Performing click
ในทางกลับกันหากฉันใช้รหัสต่อไปนี้ปุ่มจะถูกคลิกพิมพ์เหมือนกัน แต่ปุ่มไม่ได้ติดอยู่ในสถานะไฮไลต์:
public class MainActivity extends AppCompatActivity {
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AppCompatButton button = (AppCompatButton) findViewById(R.id.mybutton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Test", "calling onClick");
}
});
button.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
v.getBackground().setColorFilter(0xe0f47521,PorterDuff.Mode.SRC_ATOP);
v.invalidate();
break;
}
case MotionEvent.ACTION_UP: {
v.getBackground().clearColorFilter();
v.invalidate();
// v.performClick();
Log.d("Test", "Performing click");
return false;
}
}
return false;
}
});
}
}
ฉันสับสนเล็กน้อยเกี่ยวกับสิ่งที่ห่วงโซ่การตอบกลับเหตุการณ์การสัมผัส ฉันเดาว่ามัน:
1) TouchListener
2) ClickListener
3) ParentViews
บางคนสามารถยืนยันสิ่งนี้ได้เช่นกัน?