Intereting Posts
Поток Android до тех пор, пока не появится Кордоба-платформа add android дает ошибку: «Ошибка: предоставленный путь не является проектом Android». Метаданные Android из манифеста, возвращающего null Android: получить доступ к базе данных SQLite через Content Provider или реализовать DAO? Длительный опрос против Apple Push Notification Service и Android C2DM Проблема с android MediaRecorder setVideoSize () Воспроизводить аудио из потока в андроиде Как Google смог это сделать? Слайд ActionBar в приложении для Android Показать текст помощника ниже EditText вместе с подсказкой Ошибка: не удалось получить доступ к диспетчеру пакетов. Работает ли система? – В Android Studio Android: Lint говорит – класс, указанный в файле макета, не был найден в проекте или в библиотеках Android: пример кода для использования собственного VPN-соединения в Android 4.0 с использованием API VPNService Как показать элементы меню переполнения в панели действий на Android Как отображать контакты в списке в Android для Android api 11+ Переключение назад / передняя камера на лету

Android singleTap / OnClick в WebView

Я загружаю веб-представление с помощью Html String, я хочу показать кнопки навигации, когда пользователь нажимает на веб-представление, я попробовал С прослушивателем onTouch, событие касания поднимается при прокрутке и нажатии, но я хочу поймать одиночный tap / clickEvent, Not scroll Event Затрагивает …, я реализовал SetOnClickListener для WebView и LinearLayout, ни один из них не работает для меня. Любая помощь в этом отношении

Solutions Collecting From Web of "Android singleTap / OnClick в WebView"

WebView не поддерживает OnClickListener . А также он потребляет события касания, даже если на веб-странице ничего не произошло, поэтому представления предков (например, LinearLayout ) не имеют возможности создать событие OnClick. Это очень неудачно.

В качестве обходного пути я расширил RelativeLayout и поместил в него свой WebView . В RelativeLayout я перезаписал onInterceptTouchEvent и искал события крана. Если обнаружен кран, то OnClickListener вызывается с помощью функции performClick() .

 public class TapAwareRelativeLayout extends RelativeLayout { private final float MOVE_THRESHOLD_DP = 20 * getResources().getDisplayMetrics().density; private boolean mMoveOccured; private float mDownPosX; private float mDownPosY; public TapAwareRelativeLayout(Context context) { super(context); } public TapAwareRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { final int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: mMoveOccured = false; mDownPosX = ev.getX(); mDownPosY = ev.getY(); break; case MotionEvent.ACTION_UP: if (!mMoveOccured) { // TAP occured performClick(); } break; case MotionEvent.ACTION_MOVE: if (Math.abs(ev.getX() - mDownPosX) > MOVE_THRESHOLD_DP || Math.abs(ev.getY() - mDownPosY) > MOVE_THRESHOLD_DP) { mMoveOccured = true; } break; } return super.onInterceptTouchEvent(ev); } 

}

На этой странице: http://www.codeshogun.com/blog/2009/04/16/how-to-implement-swipe-action-in-android/

Кажется, что события касания должны быть правильно захвачены. Проверь это:

 @Override public boolean dispatchTouchEvent(MotionEvent e){ super.dispatchTouchEvent(e); return mGestureDetector.onTouchEvent(e); } 

Я изменил ответ Zsolt Safrany, и я включил его контент onInterceptTouchEvent в метод onTouch в onTouch и он сработал.

 webview.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { Log.v(TAG,"Got a touch event in the web view!"); final int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: mMoveOccured = false; mDownPosX = ev.getX(); mDownPosY = ev.getY(); break; case MotionEvent.ACTION_UP: if (!mMoveOccured) { //click operation is here } break; case MotionEvent.ACTION_MOVE: if (Math.abs(ev.getX() - mDownPosX) > MOVE_THRESHOLD_DP || Math.abs(ev.getY() - mDownPosY) > MOVE_THRESHOLD_DP) { mMoveOccured = true; } break; } return false; } }); 

Рабочий код ::

 final Boolean[] mMoveOccured = new Boolean[1]; final float[] mDownPosX = new float[1]; final float[] mDownPosY = new float[1]; final float MOVE_THRESHOLD_DP = 20 * getResources().getDisplayMetrics().density; userPic.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { final int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: mMoveOccured[0] = false; mDownPosX[0] = event.getX(); mDownPosY[0] = event.getY(); break; case MotionEvent.ACTION_UP: if (!mMoveOccured[0]) { Toast.makeText(v.getContext(), "Webview pressed", Toast.LENGTH_SHORT).show(); } break; case MotionEvent.ACTION_MOVE: if (Math.abs(event.getX() - mDownPosX[0]) > MOVE_THRESHOLD_DP || Math.abs(event.getY() - mDownPosY[0]) > MOVE_THRESHOLD_DP) { mMoveOccured[0] = true; } break; } return false; } });