web-dev-qa-db-fra.com

Quelle est la durée de l'événement sur LongPress dans Android?

Android prend en charge un événement sur LongPress. La question que j'ai est "combien de temps" (en millisecondes) est la "presse" pour déclencher l'événement?

41
mobibob

Le temps de pression long standard est ce qui est retourné par getLongPressTimeout () , qui est actuellement de 500 ms mais peut changer (en 1.0, il était de 1000 ms mais changé dans une version ultérieure; peut-être à l'avenir, il sera utilisateur- personnalisable).

Le navigateur utilise son propre temps de presse long car il a des interactions plus compliquées. Je crois que cela devrait être 1000, mais là encore, cela pourrait changer à l'avenir. Il ne s'agit pas d'ajouter les différents délais d'expiration ensemble.

43
hackbod

Vous pouvez utiliser la méthode getLongPressTimeout dans Android.view.ViewConfiguration pour déterminer par programme cette valeur.

Voir la documentation pour plus de détails.

19
Roman Nurik

Généralement, comme Roman Nurik l'a mentionné , vous pouvez utiliser ViewConfiguration.getLongPressTimeout () pour obtenir par programme une valeur de valeur de pression longue. La valeur par défaut est 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;

Mais, la durée de la presse longue est personnalisable globalement en la définissant dans l'accessibilité. Les valeurs sont courtes (400 ms), moyennes (1000 ms) ou longues (1500 ms). Vous pouvez voir son code source dans Paramètres :

// 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]);
    }
}
4
Viking Den

Voici à quoi R.array.long_press_timeout_selector_titles ressemble:

    <!-- 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>
3
Viking Den

Hmmm ... J'espérais avoir le temps accumulé. Pour autant que je sache, getLongPressTimeout (), est le temps du composant qui est ajouté lorsque l'événement-press est déterminé pour démarrer, plus TAP_TIMEOUT, plus ??? puis 1000 ms si dans le navigateur Web.

Je l'ai calculé à 1650 ms mais j'aimerais avoir une confirmation de la valeur résultante. La raison en est que j'ai besoin de quelque chose qui n'est pas intégré au SDK pour prédire la longue attente.

Je crois que la valeur de getLongPressTimeout est de 500 ms, mais le geste prend clairement plus de temps - plus proche de 2 secondes.

1
mobibob

View (et donc la plupart de ses sous-classes) utilise getLongPressTimeout. Le délai d'expiration par défaut n'était peut-être pas suffisant dans le navigateur.

0
James