Подтвердить что ты не робот

Как долго длится событие onLongPress в Android?

Android поддерживает событие onLongPress. Вопрос, который у меня есть, "как долго" (в миллисекундах) является "нажатием" для запуска события?

4b9b3361

Ответ 1

Стандартное длительное время печати - это то, что возвращается getLongPressTimeout(), которое в настоящее время составляет 500 мс, но может меняться (в 1.0 оно составляло 1000 мс, но изменен в более позднем выпуске, возможно, в будущем он будет настраиваться пользователем).

Браузер использует свое собственное длительное время, потому что он имеет несколько более сложных взаимодействий. Я считаю, что это должно быть 1000, хотя снова это может измениться в будущем. Он не добавляет разные таймауты вместе.

Ответ 2

Вы можете использовать метод getLongPressTimeout в android.view.ViewConfiguration, чтобы программно определить это значение.

Подробнее см. документы.

Ответ 3

Хммм... Я надеялся получить накопительное время. Насколько я могу судить, getLongPressTimeout() - это время компонента, которое добавляется, когда событие-прессу определяется как начало, плюс TAP_TIMEOUT, плюс??? а затем 1000 мс, если в веб-браузере.

Я вычислил, что это 1650 мс, но я хотел бы получить некоторое подтверждение результата. Причина в том, что мне нужно что-то, что не интегрировано с SDK для прогнозирования длительного удержания.

Я считаю, что значение getLongPressTimeout равно 500 мс, но жест явно занимает больше времени - ближе к 2 секундам.

Ответ 4

Как правило, как упоминал Роман Нурик, вы можете использовать ViewConfiguration.getLongPressTimeout() программно получить длинное значение значения пресса. Значение по умолчанию - 500 мс.

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

Но длительная продолжительность печати настраивается глобально, устанавливая ее в доступности. Значения короткие (400 мс), средний (1000 мс) или длинный (1500 мс). Вы можете увидеть его исходный код в Settings:

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

Ответ 5

В представлении (и, следовательно, большинстве его подклассов) используется getLongPressTimeout. Возможно, тайм-аут по умолчанию не был достаточным в браузере.

Ответ 6

Это то, что R.array.long_press_timeout_selector_titles выглядит следующим образом:

    <!-- 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>