Как долго длится событие onLongPress в Android? - PullRequest
38 голосов
/ 19 декабря 2009

Android поддерживает событие onLongPress. У меня вопрос: как долго (в миллисекундах) «нажать», чтобы вызвать событие?

Ответы [ 6 ]

40 голосов
/ 22 декабря 2009

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

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

18 голосов
/ 19 декабря 2009

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

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

3 голосов
/ 19 сентября 2017

Как правило, , как упоминал Роман Нурик, , вы можете использовать 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 мс). Вы можете увидеть его исходный код в Настройки :

// 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]);
    }
}
2 голосов
/ 19 сентября 2017

Вот как выглядит 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>
1 голос
/ 19 декабря 2009

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

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

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

0 голосов
/ 19 декабря 2009

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

...