我为AutocompleteTextView创建了一个onTouchListener。但onTouch()方法显示警告:
如果覆盖onTouchEvent或使用OnTouchListener的View也没有实现performClick并在检测到点击时调用它,则View可能无法正确处理辅助功能操作。理想情况下,处理点击操作的逻辑应放在View#performClick中,因为某些辅助功能服务会在发生单击操作时调用performClick。
我不明白这是什么意思。这是代码。
actvEntryCategory.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
try{
actvEntryCategory.clearFocus();
actvEntryCategory.requestFocus();
}catch (Exception e){
Log.d("eEMP/EntryCreate", "Error raised at EntryCategory touch event due to " + e.toString());
}
return false;
}
});
我是Andoird的新手。任何帮助将不胜感激。
答案 0 :(得分:1)
AutocompleteTextView。但onTouch()方法显示警告:如果覆盖onTouchEvent或使用OnTouchListener的View也没有实现performClick
FROM DOCS
自定义视图控件可能需要非标准的触摸事件行为。例如,自定义控件可以使用onTouchEvent(MotionEvent)
侦听器方法来检测ACTION_DOWN
和ACTION_UP
事件并触发特殊的单击事件。为了保持与辅助功能服务的兼容性,处理此自定义单击事件的代码必须执行以下操作:
为解释的点击操作生成适当的AccessibilityEvent。
启用辅助功能服务,以便为无法使用触摸屏的用户执行自定义点击操作。
为了有效地处理这些需求,您的代码应该覆盖performClick()
方法,该方法必须调用此方法的超级实现,然后执行click事件所需的任何操作。检测到自定义点击操作后,该代码应调用您的performClick()
方法。以下代码示例演示了此模式。
<强>解强>
@SuppressLint("ClickableViewAccessibility")
忽略此警告performClick()
方法采样代码以覆盖文档
中的performClick()
方法
class CustomTouchView extends View {
public CustomTouchView(Context context) {
super(context);
}
boolean mDownTouch = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
// Listening for the down and up touch events
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mDownTouch = true;
return true;
case MotionEvent.ACTION_UP:
if (mDownTouch) {
mDownTouch = false;
performClick(); // Call this method to handle the response, and
// thereby enable accessibility services to
// perform this action for a user who cannot
// click the touchscreen.
return true;
}
}
return false; // Return false for other touch events
}
@Override
public boolean performClick() {
// Calls the super implementation, which generates an AccessibilityEvent
// and calls the onClick() listener on the view, if any
super.performClick();
// Handle the action for the custom click here
return true;
}
}