Обнаружение комбинации клавиш / двойных нажатий в Android

#android

#Android

Вопрос:

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

Есть хороший способ сделать это?

РЕДАКТИРОВАТЬ: я знаю, что мог бы создать кнопку, но давайте просто скажем, что я вообще не хочу занимать место на экране. Итак, я решил, что комбинации клавиш будут лучшим способом, только я не могу придумать ни одного хорошего способа их обнаружения. Предоставляет ли Android какой-либо API, который я могу использовать?

РЕДАКТИРОВАТЬ: Стефан указал на эту интересную идею, которая меня заинтриговала.

Обратите внимание, что программная клавиатура может использовать комбинации клавиш, но конкретно этого не делает, и из-за этого она намного лучше. Например, для ввода одной буквы с заглавной буквы в Android вы не нажимаете клавишу shift одновременно с буквой, вы нажимаете клавишу Shift один раз, а затем нажимаете букву (и тогда ваша клавиша Shift автоматически становится не нажатой). Я лично считаю, что поток юзабилити фантастически хорошо работает на телефоне, где сложно координировать более одного пальца одновременно.

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

РЕДАКТИРОВАТЬ: я мог бы пойти и на двойные нажатия, если его легче обнаружить, чем комбинации, но опять же я понятия не имею, как обнаружить двойные нажатия клавиш. Еще раз спасибо, Стефан, за еще одну блестящую идею.

Ответ №1:

Вы уверены, что это хорошая идея? Не было бы проще переопределить кнопку поиска для этого?

У вас есть настоящий телефон Android, которым вы пользуетесь лично? Я понимаю, что некоторые разработчики Android по-прежнему используют в основном iPhone и на самом деле не знакомы с интерфейсом Android, кроме телефона, который им дают для тестирования на работе.

Обратите внимание, что программная клавиатура может использовать комбинации клавиш, но конкретно этого не делает, и из-за этого она намного лучше. Например, чтобы использовать заглавную букву, в Android вы не нажимаете клавишу shift одновременно с буквой, вы нажимаете клавишу shift один раз, а затем нажимаете букву (и тогда ваша клавиша shift автоматически становится не нажатой). Лично я считаю, что этот процесс юзабилити фантастически хорошо работает на телефоне, где трудно координировать более одного пальца одновременно.

Комментарии:

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

2. Ну, у меня есть телефон Android, и это интересная вещь, на которую вы указали. Я переосмыслю свой дизайн, но в то же время я был бы признателен, если бы вы могли дать мне некоторое представление о том, как обнаруживать комбинации клавиш. Я бы предпочел иметь больше возможностей.

3. Местоположение сейчас не имеет значения. Видите ли, одна из причин, по которой я хочу использовать комбинацию клавиш, заключается в том, что я хотел бы, чтобы каждая кнопка вела себя нормально при нажатии, но я хочу, чтобы что-то особенное происходило только при нажатии комбинации. Клавиша SHIFT — это специально разработанная клавиша, поэтому я думаю, что при ее нажатии Android просто переключает состояние ЗАГЛАВНЫХ букв. Но у меня не может быть своего собственного пользовательского ключа. Если пользователь нажимает кнопку МЕНЮ, я бы хотел показать ему меню. Так что, я думаю, мне нужно использовать комбинации.

4. Ах, хорошо, вы рассматривали возможность выполнения длительных нажатий (или двух последовательных нажатий) одной и той же клавиши / кнопки? Рассматривали ли вы движения / жесты в разных направлениях? Некоторые приложения очень успешно используют эти разные способы создания ярлыков (в любом случае, мне нужно идти сейчас, я отвечу завтра, если кто-то еще не сделал этого к тому времени).

5. Я не хочу использовать длинные нажатия, так как они как бы замедляют работу пользователя. Если я создаю ярлык, я бы хотел, чтобы он был быстрым. У меня есть опасения по поводу свайпов / жестов, которые трудно запомнить; и опять же, комбо быстрее. Двойные нажатия могут работать, но я не знаю, как их обнаружить, не мешая поведению по умолчанию.

Ответ №2:

Что ж, я также согласен с тем, что кнопка поиска — это плохой дизайн Android. Вы можете следовать методу onKeyDown

 if (keyCode == KeyEvent.KEYCODE_MENU) { 
  // start a thread and let it stop in a while 
} else if(keyCode == YOURDEFINECODE ){ 
  // if the thread has been running do what you want
} else { 
  // stop the thread
}
 

Комментарии:

1. Извините, но я вас не понял. Не могли бы вы объяснить немного больше. Особенно то, что вы имеете в виду keyCode == YOURDEFINECODE .

2. Я не знаю, хотите ли вы сделать это в activity или в виджете. Моя идея состоит в том, чтобы запустить поток, когда пользователь нажал кнопку меню, вы можете справиться с этим с помощью метода onKeyDown. Он будет существовать некоторое время, например, 5 секунд или более, чтобы дождаться вашего следующего действия, и после этого он должен исчезнуть сам. В течение этого времени, если пользователь нажал определенную вами клавишу, вы можете перейти к нужному действию, если они нажали другую клавишу, просто остановите поток.