在安卓系统中,onLongPress事件的持续时间有多长?

48

Android支持一个名为onLongPress的事件。我想知道触发这个事件需要按住多长时间(以毫秒为单位)?

6个回答

54

标准长按时间是由getLongPressTimeout()返回的,目前为500毫秒,但可能会更改(1.0版本中为1000毫秒,但在后续版本中进行了更改;将来可能会用户可自定义)。

浏览器使用自己的长按时间,因为它具有一些更复杂的交互。 我相信这应该是1000,但也可能会在将来更改。 它不会将不同的超时时间相加。


2
你确定吗?我的观察是网络浏览器上1650毫秒(考虑到其他进程负载,要确定为1750毫秒)。你能引用一些实验室笔记或Android文档吗? - mobibob
2
此外,从源代码来看,LONG时间测量直到检测到短按后才开始计时。这就是为什么我认为它沿状态累积的原因。我并不挑战您的陈述,只是讨论以确保答案全面,并且我的问题没有被误解。 - mobibob
2
很不幸(对我来说),这是我问题的唯一正确答案。但是...我真正想学习的是从按住按键开始到浏览器弹出“解析器”对话框的时间。我测量了1.650秒,所以我想找到缺失的650毫秒。我将把答案授予hackbod,并感谢其他所有人的评论。 - mobibob
3
长按持续时间已经可以自定义。您可以在辅助功能中进行设置。取值为短、正常或长。因此用户有可能使用自定义的持续时间(我就是)。 - Crazyrems

19

您可以使用android.view.ViewConfiguration中的getLongPressTimeout方法以编程方式确定此值。

有关详细信息,请参见文档


5

一般来说,您可以使用ViewConfiguration.getLongPressTimeout()编程方式获取长按值。默认值为500毫秒,就像Roman Nurik所提到的那样

/**
 * 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]);
    }
}

4
这是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

嗯...我希望能得到累计时间。据我所知,getLongPressTimeout()是组件时间,在确定事件按下开始时添加的时间,加上TAP_TIMEOUT,再加上???,然后如果在Web浏览器中,则为1000ms。

我已经计算出它为1650ms,但我想确认一下结果值。原因是我需要一些与SDK集成无关的东西来预测长按。

我认为getLongPressTimeout的值为500ms,但手势明显需要更长时间——接近2秒。


0

View(以及它的大多数子类)使用getLongPressTimeout。也许在浏览器中默认的超时时间不够。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接