45

Android 支持 onLongPress 事件。我的问题是“按下”触发事件的“多长时间”(以毫秒为单位)?

4

6 回答 6

51

标准的长按时间是getLongPressTimeout()返回的时间,目前是 500 毫秒,但可能会改变(在 1.0 中是 1000 毫秒,但在以后的版本中有所改变;也许在未来它将是用户可定制的)。

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

于 2009-12-22T01:53:47.920 回答
19

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

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

于 2009-12-18T22:18:30.797 回答
4

一般来说,就像 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]);
    }
}
于 2017-09-19T14:37:48.657 回答
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>

于 2017-09-19T14:40:55.677 回答
1

嗯......我希望得到累积时间。据我所知,getLongPressTimeout()是确定事件按下开始时添加的组件时间,加上 TAP_TIMEOUT,加上 ??? 如果在网络浏览器中,则为 1000 毫秒。

我计算它是 1650 毫秒,但我想对结果值进行一些确认。原因是我需要一些未与 SDK 集成的东西来预测长期持有。

我相信 getLongPressTimeout 的值是 500 毫秒,但手势显然需要更长的时间——接近 2 秒。

于 2009-12-19T01:31:00.593 回答
0

View(以及它的大部分子类)使用 getLongPressTimeout。浏览器中的默认超时可能不够。

于 2009-12-19T01:40:19.607 回答