Android中的onLongPress事件多长时间?
Posted
技术标签:
【中文标题】Android中的onLongPress事件多长时间?【英文标题】:How long is the event onLongPress in the Android? 【发布时间】:2009-12-18 21:54:59 【问题描述】:android 支持 onLongPress 事件。我的问题是“按下”触发事件的时间是“多长时间”(以毫秒为单位)?
【问题讨论】:
【参考方案1】:标准的长按时间是getLongPressTimeout() 返回的时间,目前为 500 毫秒,但可能会有所变化(在 1.0 中为 1000 毫秒,但在以后的版本中有所更改;将来可能会是用户可自定义的)。
浏览器使用自己的长按时间,因为它有一些更复杂的交互。我相信这应该是 1000,尽管将来它可能会再次改变。它不是将不同的超时时间加在一起。
【讨论】:
你确定吗?我的观察是 Web 浏览器上的 1650 毫秒(1750 毫秒可以确定其他进程负载)。你能找到一些实验室笔记或 Android 文档吗? .. 另外,查看源代码,LONG time 直到检测到短按后才开始计时。这就是为什么我认为它是沿州累积的。我不是在挑战你的陈述,只是讨论以确保答案是彻底的,我的问题没有被误解。 不幸的是(对我来说)这是我问题的唯一正确答案。但是......我真正想了解的是从按住开始到浏览器弹出“解析器”对话框的时间。我正在测量 1.650 秒,所以我想找到丢失的 650 毫秒。我将把答案奖励给 hackbod 并感谢其他所有人的 cmets。 长按时间已经可以自定义。您可以在可访问性中设置它。值是短的、正常的或长的。所以用户可能正在使用用户定义的持续时间(我是)【参考方案2】:您可以使用android.view.ViewConfiguration
中的getLongPressTimeout
方法以编程方式确定此值。
详情请见the docs。
【讨论】:
【参考方案3】:这是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>
【讨论】:
【参考方案4】:一般like Roman Nurik mentioned,可以使用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() 是确定事件按下开始时添加的组件时间,加上 TAP_TIMEOUT,再加上???如果在网络浏览器中,则为 1000 毫秒。
我计算它是 1650 毫秒,但我想确认 resultant 值。原因是我需要一些未与 SDK 集成的东西来预测长期持有。
我相信 getLongPressTimeout 的值是 500 毫秒,但手势显然需要更长的时间——接近 2 秒。
【讨论】:
【参考方案6】:View(以及它的大部分子类)使用 getLongPressTimeout。可能浏览器默认的超时时间不够。
【讨论】:
以上是关于Android中的onLongPress事件多长时间?的主要内容,如果未能解决你的问题,请参考以下文章
React Native - 3 View, Text简介以及onPress & onLongPress事件