Разница между фокусируемым и focusableInTouchMode?

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

Приведите несколько примеров и подробно объясните их.

Ответ 1

Это объясняется в блоге разработчиков Android: http://android-developers.blogspot.co.at/2008/12/touch-mode.html

В следующих цитатах должно быть ясно:

Сам по себе сенсорный режим очень легко понять, поскольку он просто указывает, было ли последнее взаимодействие с пользователем сенсорным. Например, если вы пользуетесь телефоном G1, выбор виджета с трекболом выведет вас из сенсорного режима;

...

В сенсорном режиме фокуса и выбора нет. Любой выбранный элемент в списке в сетке становится не выбранным, как только пользователь вводит сенсорный режим. Аналогичным образом, любые сфокусированные виджеты не фокусируются, когда пользователь переходит в режим касания.

...

Теперь, когда вы знаете, что фокус не существует в сенсорном режиме, я должен объяснить, что это не совсем так. Фокус может существовать в сенсорном режиме, но особым образом мы называем фокусируемым в сенсорном режиме. Этот специальный режим был создан для виджетов, которые получают ввод текста, например EditText, или, если включена фильтрация, ListView.

...

Фокусирующийся в касании режим - это свойство, которое вы можете от кода или XML. Однако его следует использовать экономно и только в очень специфические ситуации, так как это нарушает согласованность с обычным Android поведение. Игра является хорошим примером приложения, которое может хорошее использование свойства фокусируемого в касании. MapView, если он используется в полноэкранный режим, как в Google Maps, является еще одним хорошим примером того, где вы можете используйте режим фокусировки в сенсорном режиме.

Ответ 2

Приведите пример и подробно объясните их

Я дам вам свой опыт:

У меня было приложение Google TV, у которого была активность с большим количеством ImageButtons.

Я хотел, чтобы ImageButtons можно было выбрать.

Поэтому, если человек нажимает на них с помощью мыши или пульта дистанционного управления, они становятся только выбранными (выделено в моем случае). Затем, если пользователь нажимает выбранный ImageButton, действие запускается. Это точное поведение было достигнуто за счет включения свойства focusableInTouchMode через XML-макет.

Все, что мне нужно было сделать, это установить обычный onClickListener для ImageButtons и voila!

Я не проверял свое приложение на трубке, но, думаю, это принесет знакомый результат.

ИЗМЕНИТЬ

Когда?

Я сказал вам пример использования, который я тестировал: когда вы хотите, чтобы ваша кнопка onClickListener запускала действие при втором щелчке, после того, как вы сначала нажали и выбрали Button.

Я использовал первый щелчок, чтобы получить "фокус", и отобразить анимацию Zoom-In scale Up на моей кнопке.

Как?

Просто установите свойство кнопки focusableInTouchMode на true в вашем файле макета XML.

Ответ 3

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

Фокусируемый сенсорный режим позволяет просматривать фокус, когда пользователь прикасается к виду, хорошим примером такого компонента является EditText.

С Button или нажатием любого нажатого состояния компонента обычно вас интересует.

Ответ 4

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

Чтобы проверить, находится ли устройство в касании, вызовите метод класса isInTouchMode().