Android поддерживает событие onLongPress. Вопрос, который у меня есть, "как долго" (в миллисекундах) является "нажатием" для запуска события?
Как долго длится событие onLongPress в Android?
Ответ 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>