Android 支持 onLongPress 事件。我的问题是“按下”触发事件的“多长时间”(以毫秒为单位)?
6 回答
标准的长按时间是getLongPressTimeout()返回的时间,目前是 500 毫秒,但可能会改变(在 1.0 中是 1000 毫秒,但在以后的版本中有所改变;也许在未来它将是用户可定制的)。
浏览器使用自己的长按时间,因为它有一些更复杂的交互。我相信这应该是 1000,尽管将来它可能会再次改变。它不是将不同的超时时间加在一起。
您可以使用 in 中的getLongPressTimeout
方法android.view.ViewConfiguration
以编程方式确定此值。
有关详细信息,请参阅文档。
一般来说,就像 Roman Nurik 提到的那样,您可以使用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]);
}
}
这就是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>
嗯......我希望得到累积时间。据我所知,getLongPressTimeout()是确定事件按下开始时添加的组件时间,加上 TAP_TIMEOUT,加上 ??? 如果在网络浏览器中,则为 1000 毫秒。
我计算它是 1650 毫秒,但我想对结果值进行一些确认。原因是我需要一些未与 SDK 集成的东西来预测长期持有。
我相信 getLongPressTimeout 的值是 500 毫秒,但手势显然需要更长的时间——接近 2 秒。
View(以及它的大部分子类)使用 getLongPressTimeout。浏览器中的默认超时可能不够。