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事件多长时间?的主要内容,如果未能解决你的问题,请参考以下文章

Android中的onLongPress事件多长时间?

Android 手势&触摸事件

React Native - 3 View, Text简介以及onPress & onLongPress事件

如何在 React 中的同一元素上使用 onPress 和 onLongPress?

Flutter(五)手势GestureDetector

Android 中的 Worker 可以持续重试请求多长时间?