Я хочу знать фактическую разницу между ними... Когда каждый из них должен использоваться, как каждый должен использоваться и в каких ситуациях каждый из них полезен?
Приведите несколько примеров и подробно объясните их.
Я хочу знать фактическую разницу между ними... Когда каждый из них должен использоваться, как каждый должен использоваться и в каких ситуациях каждый из них полезен?
Приведите несколько примеров и подробно объясните их.
Это объясняется в блоге разработчиков Android: http://android-developers.blogspot.co.at/2008/12/touch-mode.html
В следующих цитатах должно быть ясно:
Сам по себе сенсорный режим очень легко понять, поскольку он просто указывает, было ли последнее взаимодействие с пользователем сенсорным. Например, если вы пользуетесь телефоном G1, выбор виджета с трекболом выведет вас из сенсорного режима;
...
В сенсорном режиме фокуса и выбора нет. Любой выбранный элемент в списке в сетке становится не выбранным, как только пользователь вводит сенсорный режим. Аналогичным образом, любые сфокусированные виджеты не фокусируются, когда пользователь переходит в режим касания.
...
Теперь, когда вы знаете, что фокус не существует в сенсорном режиме, я должен объяснить, что это не совсем так. Фокус может существовать в сенсорном режиме, но особым образом мы называем фокусируемым в сенсорном режиме. Этот специальный режим был создан для виджетов, которые получают ввод текста, например EditText, или, если включена фильтрация, ListView.
...
Фокусирующийся в касании режим - это свойство, которое вы можете от кода или XML. Однако его следует использовать экономно и только в очень специфические ситуации, так как это нарушает согласованность с обычным Android поведение. Игра является хорошим примером приложения, которое может хорошее использование свойства фокусируемого в касании. MapView, если он используется в полноэкранный режим, как в Google Maps, является еще одним хорошим примером того, где вы можете используйте режим фокусировки в сенсорном режиме.
Приведите пример и подробно объясните их
Я дам вам свой опыт:
У меня было приложение Google TV, у которого была активность с большим количеством ImageButtons.
Я хотел, чтобы ImageButtons можно было выбрать.
Поэтому, если человек нажимает на них с помощью мыши или пульта дистанционного управления, они становятся только выбранными (выделено в моем случае). Затем, если пользователь нажимает выбранный ImageButton
, действие запускается. Это точное поведение было достигнуто за счет включения свойства focusableInTouchMode
через XML-макет.
Все, что мне нужно было сделать, это установить обычный onClickListener
для ImageButtons и voila!
Я не проверял свое приложение на трубке, но, думаю, это принесет знакомый результат.
Когда?
Я сказал вам пример использования, который я тестировал: когда вы хотите, чтобы ваша кнопка onClickListener
запускала действие при втором щелчке, после того, как вы сначала нажали и выбрали Button
.
Я использовал первый щелчок, чтобы получить "фокус", и отобразить анимацию Zoom-In scale Up на моей кнопке.
Как?
Просто установите свойство кнопки focusableInTouchMode
на true
в вашем файле макета XML.
Focused - это состояние для просмотра, и в основном фокус может быть изменен с помощью трекбола и dpad. Если ваше состояние сосредоточено, ваше представление может иметь другой фон.
Фокусируемый сенсорный режим позволяет просматривать фокус, когда пользователь прикасается к виду, хорошим примером такого компонента является EditText
.
С Button
или нажатием любого нажатого состояния компонента обычно вас интересует.
Пользователи могут взаимодействовать со своими устройствами с помощью аппаратных клавиш или кнопок или прикосновением к экрану. Прикосновение к экрану переключает устройство в режим касания. Затем пользователь может взаимодействовать с ним, коснувшись экранных виртуальных кнопок, изображений и т.д.
Чтобы проверить, находится ли устройство в касании, вызовите метод класса isInTouchMode().