Показывать аффорданс / наведение / всплывающую подсказку при длительном нажатии на View

Я хотел бы показать всплывающую подсказку, то есть дополнительную несущественную информацию о View, когда пользователь нажимает на нее долгое время.

Два варианта, которые я вижу перед собой, используют OnLongClickListener для создания настраиваемой всплывающей подсказки перед выбранным просмотром; или злоупотребляя OnCreateContextMenuListener , чтобы создать контекстное меню, которого нет.

Ни то, ни другое не кажется лучшим решением, и я не уверен, сработает ли тот или иной вариант. Я поискал в сети и не нашел никаких подсказок. Какие-нибудь альтернативы, или я должен получить пощечину за попытку сделать это? Спасибо!


person Cheezmeister    schedule 19.02.2011    source источник
comment
Мне кажется, OnLongClickListener - это именно то, что вам нужно.   -  person FoamyGuy    schedule 19.02.2011
comment
A. Всплывающие подсказки не подходят для смартфонов. Пространство на экране уже настолько ограничено. Всплывающая подсказка займет половину экрана, так что вы также можете использовать другое действие или диалоговое окно. Б. Пользователи не ожидают всплывающей подсказки. Они ожидают выбора при длительном нажатии. Я бы сделал шаг назад и оценил ваше дизайнерское решение.   -  person user432209    schedule 19.02.2011
comment
Привет, @ user4, он наверняка не занимает половину экрана! См. Мой ответ Марку ниже. Но я найду альтернативу :)   -  person Cheezmeister    schedule 21.02.2011
comment
На заметку будущим читателям: сегодня это обычная практика, так что это очень актуальный вопрос.   -  person Ky Leggiero    schedule 15.07.2014


Ответы (2)


Я хотел бы показать всплывающую подсказку, то есть дополнительную несущественную информацию о представлении, когда пользователь долго нажимает на него.

Какие примеры этого шаблона пользовательского интерфейса в мобильной среде вы используете в качестве основы для этого решения?

Ни то, ни другое не кажется лучшим способом вести дела

Действительно? Из двух, ИМХО, OnLongClickListener вполне верный ответ.

Какие-нибудь альтернативы, или я должен получить пощечину за попытку сделать это?

Ах, как мне нравится вечерний запах скумбрии ... пахнет победой.

(конечно, я показываю свой возраст, перефразируя Apocalypse Now, но, c ' est la vie ...)

Серьезно, я в целом согласен с @ user432209 по этому поводу, если у вас нет убедительных примеров. Во-первых, долгое нажатие на помощь невозможно обнаружить. Во-вторых, это будет мешать работе виджетов, которые на самом деле имеют контекстные меню, например EditText.

Что касается экрана телефона, я скептически отношусь к практической применимости помощи по виджетам. На экране планшета я вижу использование веб-подхода к значку справки с одной стороны виджета - при нажатии на этот значок появляется всплывающая справка.

Опять же, если вы видели, как это успешно используется где-то на мобильных устройствах, мне было бы интересно узнать, где.

person CommonsWare    schedule 19.02.2011
comment
Приложение для iPhone, которое я должен скопировать, делает это с относительным успехом. Всплывающая подсказка имеет тот же размер и (примерно) ту же форму, что и контекстное меню, с тем важным отличием, что на нее нельзя нажимать. Я должен уточнить, что он используется только с некоторыми предметами, которые, как считается, имеют большее значение для истории, а не со всем, что находится под солнцем. Но, думаю, в этом случае я любезно возьму свою скумбрию в лицо. - person Cheezmeister; 21.02.2011
comment
@Cheezemeister: всплывающая подсказка имеет тот же размер и (примерно) ту же форму, что и контекстное меню, с тем важным отличием, что на нее нельзя нажимать. - тем не менее, вы все равно должны использовать OnLongClickListener. FWIW, это похоже на хорошее обсуждение роли всплывающих подсказок в контакте: всплывающие подсказки stackoverflow.com/questions/1737773/ - person CommonsWare; 21.02.2011
comment
Панель действий Android использует долгое нажатие для всплывающих подсказок, таких как - person user457015; 29.01.2013
comment
На сегодняшний день Android использует это в большом количестве. Если бы вы могли, я бы хотел увидеть исправленный ответ. - person Ky Leggiero; 15.07.2014
comment
@Supuhstar: Не совсем. Элементы панели действий предлагают всплывающие подсказки при длительном нажатии, о которых почти никто не знает. Мне ничего не известно в Android, что даже предлагало бы это из коробки. - person CommonsWare; 15.07.2014
comment
@CommonsWare - большинство приложений, на которые я подаю в суд, используют эти всплывающие подсказки. То, что вы не знали об этом раньше, не означает, что об этом знает примерно ноль людей. - person Ky Leggiero; 15.07.2014
comment
@Supuhstar: Нет, когда я говорю, что примерно ноль людей знают об этом, я имею в виду пользователей, а не разработчиков. - person CommonsWare; 15.07.2014
comment
Материальный дизайн предоставляет всплывающие подсказки для мобильных устройств. В спецификации показаны два примера, один с использованием длительного нажатия, а другой с использованием фокуса Android. material.io/components/tooltips/#placement - person Tom; 15.10.2019

В Android Oreo появился атрибут android:tooltipText, чтобы отображать простую всплывающую подсказку, похожую на тост, когда пользователь долго нажимает на View:

<Button
    // ...
    android:tooltipText="@string/share_button_tooltip"/>

Хотя он был представлен в API 26, вы все равно можете использовать его через Вспомогательный класс TooltipCompat:

TooltipCompat.setTooltipText(shareButton, getString(R.string.share_button_tooltip))

Я предлагаю установить android:contentDescription, а затем использовать его в качестве текста всплывающей подсказки, чтобы убить 2 камня одной птицей:

<Button
    // ...
    android:contentDescription="@string/share_button_tooltip"/>

TooltipCompat.setTooltipText(shareButton, shareButton.getContentDescription())
person Egor Neliuba    schedule 17.03.2018