Estoy cargando la vista web con Html String, quiero mostrar los botones de navegación cuando el usuario toca en la vista web, intenté Con el oyente onTouch, toque evento aumenta al desplazarse y tocar pero i quiere coger solo toque/ClickEvent, se desplaza toca Evento ..., he implementado SetOnClickListener tanto para WebView y LinearLayout, ninguno de ellos no está funcionando para mí Cualquier ayuda con respecto a esteAndroid singleTap/OnClick en WebView
Respuesta
Desde esta página: http://www.codeshogun.com/blog/2009/04/16/how-to-implement-swipe-action-in-android/
Parece que los eventos táctiles deben atraparse correctamente. Mira esto:
@Override
public boolean dispatchTouchEvent(MotionEvent e){
super.dispatchTouchEvent(e);
return mGestureDetector.onTouchEvent(e);
}
WebView
no soporta el OnClickListener
. Y también consume eventos táctiles aunque no pasó nada en la página web, por lo que las vistas de los antepasados (como su LinearLayout
) no tienen ninguna posibilidad de producir un evento OnClick. Es muy desafortunado
Como una solución extendí un RelativeLayout
y puse mi WebView
dentro de él. En el RelativeLayout
he sobrescrito onInterceptTouchEvent
y estaba buscando eventos tap. Si se detecta un toque, se invoca RelativeLayout
's OnClickListener
con 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);
}
}
que modifica la respuesta de Zsolt Sáfrány y me puso su contenido onInterceptTouchEvent
's en el método de vista web onTouch
y funcionó.
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;
} });
Esta solución contiene errores (event y ev.getX()) y funciona como la primera solución, es decir, no funciona. – CoolMind
código :: Trabajado
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;
}
});
- 1. Html Audio en Android Webview
- 2. WebView y cookies en Android
- 3. Android: Muestra imágenes en Webview
- 4. Menú contextual en Android WebView
- 5. Android WebView rendimiento
- 6. Android Webview navegación privada
- 7. Android. WebView y loadData
- 8. Android webView saveState
- 9. Android: PhoneGap vs Webview
- 10. Android WebView Javascript getSelection
- 11. Android WebView TimeOut
- 12. Android WebView onReceivedError()
- 13. Android: WebView ActionBar (Honeycomb)?
- 14. Android Webview POST
- 15. Android WebView removeCookie
- 16. Android WebView Protocol Handler
- 17. Android webview & localStorage
- 18. Accesibilidad y Android WebView
- 19. Cancelar la carga en WebView en Android
- 20. Rss feed en webview en android
- 21. Android WebView contacto evento enlace
- 22. Android WebView Ventana nueva URL
- 23. Android WebView 302 Redirect - Honeycomb
- 24. Android WebView desplácese hacia abajo
- 25. Android WebView no carga jQuery
- 26. Android WebView canGoBack siempre verdadero
- 27. Android WebView color de fondo
- 28. android webview contenido no seleccionable
- 29. WebView con un android IFRAME
- 30. Cómo habilitar WebKitDeveloperExtras en WebView de Android
Hey @Saffer puede u por favor dar algunos datos podrían Forma de usar este. gracias .. – sandy
@Zsolt - No encontré cómo poner webView en RelativeLayout, ¿podrían dar más información al respecto? – Braj
Colocas WebView en RelativeLayout en el archivo de diseño xml. El tamaño que especificó para WebView antes ahora es la especificación de tamaño de RelativeLayout y usted hace que WebView coincida con el tamaño de su elemento principal (RelativeLayout). Esto les hará tener el mismo tamaño mientras RelativeLayout envuelve WebView. –