¿Cuánto dura el evento onLongPress en Android?

4 minutos de lectura

Android admite un evento onLongPress. La pregunta que tengo es ‘¿cuánto tiempo’ (en milisegundos) es ‘presionar’ para activar el evento?

avatar de usuario de hackbod
hackbod

El tiempo de pulsación largo estándar es lo que devuelve getLongPressTimeout()que actualmente es de 500 ms pero puede cambiar (en 1.0 era de 1000 ms pero cambió en una versión posterior; tal vez en el futuro sea personalizable por el usuario).

El navegador utiliza su propio tiempo de pulsación largo porque tiene algunas interacciones más complicadas. Creo que esto debería ser 1000, aunque nuevamente puede cambiar en el futuro. No es sumar los diferentes tiempos de espera juntos.

  • Estas seguro de esto? Mi observación es de 1650 ms (1750 ms para estar seguro con otra carga de proceso) en el navegador web. ¿Puedes ubicar algunas notas de laboratorio o documentos de Android?

    – mobibob

    22 de diciembre de 2009 a las 23:08

  • .. también, mirando el código fuente, el tiempo LARGO no comienza su medición de tiempo hasta que se detecta una pulsación corta. Por eso creo que es acumulativo a lo largo del estado. No estoy cuestionando su declaración, solo discutiendo para asegurarme de que la respuesta sea completa y mi pregunta no se malinterprete.

    – mobibob

    22 de diciembre de 2009 a las 23:12

  • Desafortunadamente (para mí) esta es la única respuesta correcta a mi pregunta. Pero… lo que realmente quería saber era el tiempo transcurrido desde el inicio de una pulsación hasta que el navegador muestra un cuadro de diálogo de “resolver”. Estoy midiendo 1.650 segundos, así que quiero encontrar los 650ms que faltan. Voy a otorgar la respuesta a hackbod y agradecer a todos los demás por sus comentarios.

    – mobibob

    27 de diciembre de 2009 a las 4:20

  • La duración de la pulsación larga ya es personalizable. Puedes configurarlo en accesibilidad. Los valores son corto, normal o largo. Entonces, los usuarios están potencialmente usando una duración definida por el usuario (yo soy)

    – Crazyrems

    18 de diciembre de 2014 a las 14:20

Puedes usar el getLongPressTimeout método en android.view.ViewConfiguration para determinar mediante programación este valor.

Ver los documentos para detalles.

Avatar de usuario de Viking Den
Guarida vikinga

En general, como mencionó Roman Nurik, puede usar ViewConfiguration.getLongPressTimeout() para obtener programáticamente el valor del valor de pulsación larga. El valor predeterminado es 500 ms.

/**
 * Defines the default duration in milliseconds before a press turns into
 * a long press
 */
private static final int DEFAULT_LONG_PRESS_TIMEOUT = 500;

Pero, la duración prolongada de la pulsación se puede personalizar globalmente configurándola en accesibilidad. Los valores son Corto (400 ms), Medio (1000 ms) o Largo (1500 ms). Puedes ver su código fuente en Ajustes:

// Long press timeout.
mSelectLongPressTimeoutPreference =
        (ListPreference) findPreference(SELECT_LONG_PRESS_TIMEOUT_PREFERENCE);
mSelectLongPressTimeoutPreference.setOnPreferenceChangeListener(this);
if (mLongPressTimeoutValueToTitleMap.size() == 0) {
    String[] timeoutValues = getResources().getStringArray(
            R.array.long_press_timeout_selector_values);
    mLongPressTimeoutDefault = Integer.parseInt(timeoutValues[0]);
    String[] timeoutTitles = getResources().getStringArray(
            R.array.long_press_timeout_selector_titles);
    final int timeoutValueCount = timeoutValues.length;
    for (int i = 0; i < timeoutValueCount; i++) {
        mLongPressTimeoutValueToTitleMap.put(timeoutValues[i], timeoutTitles[i]);
    }
}

Esto es lo que R.array.long_press_timeout_selector_titles parece:

    <!-- Titles for the list of long press timeout options. -->
    <string-array name="long_press_timeout_selector_titles">
        <!-- A title for the option for short long-press timeout [CHAR LIMIT=25] -->
        <item>Short</item>
        <!-- A title for the option for medium long-press timeout [CHAR LIMIT=25] -->
        <item>Medium</item>
        <!-- A title for the option for long long-press timeout [CHAR LIMIT=25] -->
        <item>Long</item>
    </string-array>
    <!-- Values for the list of long press timeout options. -->
    <string-array name="long_press_timeout_selector_values" translatable="false">
        <item>400</item>
        <item>1000</item>
        <item>1500</item>
    </string-array>

avatar de usuario de mobibob
mobibob

Hmmm … esperaba obtener el tiempo acumulativo. Por lo que yo puedo decir, getLongPressTimeout(), es el tiempo del componente que se agrega cuando se determina que event-press es el inicio, más TAP_TIMEOUT, más ??? y luego 1000 ms si está en el navegador web.

Lo calculé en 1650 ms, pero me gustaría tener alguna confirmación de la resultante valor. El motivo es que necesito algo que no esté integrado con el SDK para predecir la retención prolongada.

Creo que el valor de getLongPressTimeout es de 500 ms, pero el gesto claramente lleva más tiempo, más cerca de 2 segundos.

Avatar de usuario de James
Jaime

View (y por lo tanto la mayoría de sus subclases) usa getLongPressTimeout. Quizás el tiempo de espera predeterminado no fue suficiente en el navegador.

¿Ha sido útil esta solución?