Adel さん、問題は最初のクリックですか、それともまったくクリックしませんか?
複数のクリック可能なレイアウトがある場合、最初のクリック イベントが取得されない場合、この問題が発生します。これは、最初に選択してからクリックイベントを取得するためです。以下のコードを試してください。
private class CustomTouchListener implements OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
TextView tv = (TextView) v.findViewById(R.id.single_line_text);
if (event.getAction() == MotionEvent.ACTION_DOWN) {
tv.setTextColor(COLOR_WHEN_PRESSED);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
tv.setTextColor(COLOR_WHEN_RELEASED);
// Action of click goes here
} else if (event.getAction() == MotionEvent.ACTION_CANCEL) {
tv.setTextColor(COLOR_WHEN_RELEASED);
// To handle release outside the layout region
}
return false;
}
}
レイアウトにタッチリスナーを設定すると、これは現在の実装で機能しています。
また、レイアウトで以下を設定する必要があります
android:focusable="true"
android:focusableInTouchMode="true"
android:clickable="true"
それが役に立てば幸い!!!
編集: さらに、DOWN と UP の両方にフラグが必要です。DOWN にセットし、UP にセットされているかどうかを確認します。これにより、ユーザーが画面内の任意の場所をタップし、テキストビューにカーソルを合わせて放すバグを回避できます。