Как сделать кнопку на андроиде

Button (Кнопка)

Общая информация

В студии кнопка представлена компонентом Button в разделе Widgets. Управлять размером шрифта, цветом текста и другими свойствами можно через атрибут textAppearance, который задействует системные стили. Выпадающий список данного свойства содержит огромный перечень вариантов. Также вы можете вручную задать конкретные индивидуальные настройки через отдельные свойства.

Если вы растягиваете кнопку по всей ширине экрана (android:layout_width=»match_parent»), то дополнительно рекомендую использовать атрибут android:layout_margin (или родственные ему layout_marginRight и layout_marginLeft) для создания отступов от краев экрана (веб-мастера знакомы с этими терминами).

Так как кнопка является наследником TextView, то использует многие знакомые атрибуты: textColor, textSize и др.

Три способа обработки событий нажатий на кнопку

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

Имя для события можно выбрать произвольное, но лучше не выпендриваться. Далее нужно прописать в классе активности придуманное вами имя метода, который будет обрабатывать нажатие. Метод должен быть открытым (public) и с одним параметром, использующим объект View. Вам нужно выучить пять слов для создания метода, а сам метод поместить в класс (если вы ещё путаетесь в структуре Java-кода, то вставьте метод перед последней фигурной скобкой):

Когда пользователь нажимает на кнопку, то вызывается метод onMyButtonClick(), который в свою очередь генерирует всплывающее сообщение.

Обратите внимание, что при подобном подходе вам не придётся даже объявлять кнопку через конструкцию (Button)findViewById(R.id.button1), так как Android сама поймёт, что к чему. Данный способ применим не только к кнопке, но и к другим элементам и позволяет сократить количество строк кода.

Курсор будет находиться внутри скобок и появится подсказка OnClickListener l. Начинайте набирать new OnClickListener. Здесь также не обязательно набирать имя полностью. Набрав слово Oncl, вы увидете нужный вариант и снова нажимайте Enter. В результате вы получите готовую заготовку для обработки нажатия кнопки:

Теперь у вас есть рабочая заготовка и сразу внутри фигурных скобок метода onClick() вы можете писать свой код. Рекомендую потренироваться и набить руку в создании заготовки. Это не так сложно, и с практикой навык закрепится автоматически.

Как вариант, можно вынести код для OnClickListener в отдельное место, это удобно, когда кнопок на экране несколько и такой подход позволит упорядочить код. Удалите предыдущий пример и начните писать код заново. Принцип такой же, немного меняется порядок. В предыдущем примере мы сразу прописали в методе setOnClickListener слушателя new OnClickListener. с методом onClick(). Можно сначала отдельно объявить отдельную переменную myButtonClickListener:

У нас есть готовая переменная, и теперь, когда вы будете набирать код button.setOnClickListener, то вместо new OnClickListener впишите готовую переменную.

Для новичка описание может показаться сумбурным и не понятным, но лучше самостоятельно проделать эти операции и понять механизм.

Третий способ является родственным второму способу и также является традиционным для Java. Кнопка присваивает себе обработчика с помощью метода setOnClickListener (View.OnClickListener l), т.е. подойдет любой объект с интерфейсом View.OnClickListener. Мы можем указать, что наш класс Activity будет использовать интерфейс View.OnClickListener.

Опять стираем код от предыдущего примера. Далее после слов extends Activity дописываем слова implements OnClickListener. При появлении подсказки не ошибитесь. Обычно первым идёт интерфейс для диалогов, а вторым нужный нам View.OnClickListener.

Название вашего класса будет подчёркнуто волнистой красной чертой, щёлкните слово public и дождитесь появления красной лампочки, выберите вариант Implement methods. Появится диалоговое окно с выделенным методом onClick. Выбираем его и в коде появится заготовка для нажатия кнопки.

Метод будет реализован не в отдельном объекте-обработчике, а в Activity, который и будет выступать обработчиком. В методе onCreate() присвоим обработчик кнопке. Это будет объект this, т.е. текущий объект нашей активности.

На первых порах такой способ также покажется вам сложным и непонятным. Со временем и опытом понимание обязательно придёт.

Лично я рекомендую вам использовать первый способ, как самый простой и понятный. Использование второго и третьего способа дадут вам представление, как писать обработчики для других событий, так как кнопка может иметь и другие события. Например, кроме обычного нажатия существует долгое нажатие на кнопку (long click). Один из таких примеров с методом касания я привёл в конце этой статьи.

О том, как обрабатывать щелчки кнопки я написал отдельную статью Щелчок кнопки/Счетчик ворон. Также кнопки часто будут встречаться во многих примерах на сайте. Про обработку длительный нажатий можно прочитать в статье, посвященной ImageButton.

Предположим, у вас есть три кнопки:

Как видите, мы сократили количество кода. Теперь у нас один обработчик onClick(), в котором прописаны действия для трёх кнопок.

Сделать кнопку недоступной

Иногда нужно сделать кнопку недоступной и активировать её при определённых условиях. Через XML нельзя сделать кнопку недоступной (нет подходящего атрибута). Это можно сделать программно через метод setEnabled():

Как альтернативу можете рассмотреть атрибут android:clickable, который позволит кнопке не реагировать на касания, но при этом вид кнопки останется обычным.

Сделать кнопку плоской

Стандартная кнопка на экране выглядит выпуклой. Но в некоторых случаях желательно использовать плоский интерфейс. Раньше для этих целей можно было использовать TextView с обработкой щелчка. Но теперь рекомендуют использовать специальный стиль borderlessButtonStyle:

Кнопка сохранит своё привычное поведение, будет менять свой цвет при нажатии и т.д.

С появлением Material Design добавились другие стили, например, style=»@style/Widget.AppCompat.Button.Borderless», который является предпочтительным вариантом. Попробуйте также style=»@style/Widget.AppCompat.Button.Borderless.Colored»

Коснись меня нежно

Если вы внимательно понаблюдаете за поведением кнопки, то увидите, что код срабатывает в тот момент, когда вы отпускаете свою лапу, извините, палец с кнопки. Для обычных приложений это вполне нормально, а для игр на скорость такой подход может оказаться слишком медленным. В подобных случаях лучше обрабатывать ситуацию не с нажатием кнопки, а с его касанием. В Android есть соответствующий слушатель OnTouchListener():

Как сделать кнопку на андроиде

Получить текст с кнопки

Если у вас несколько кнопок привязаны к методу onClick(), то щелчок покажет текст нажатой кнопки.

Дополнительное чтение

Библиотеки

Источник

Добавляем кастомные кнопки в меню быстрых действий на Android 6.0

Как сделать кнопку на андроиде

В Android 6.0 Marshmallow есть множество скрытых функций, которые могут быть весьма полезны. System UI Tuner — одна из них. После активации этого меню пользователь получает больше возможностей в плане кастомизации интерфейса Android. В одной из статей на Трешбоксе мы уже рассказывали об активации и всех возможностях System UI Tuner.

Содержание

Некоторые разработчики уже приспособили System UI Tuner под нужды обычных пользователей. Например, приложение Custom Quick Settings, которое было доступно и на предыдущих версиях Android, использует UI Tuner для добавления кастомных кнопок в меню быстрых действий, которое выезжает сверху вместе со «шторкой» уведомлений. Самое крутое заключается в том, что на Android 6.0 Marshmallow использование Custom Quick Settings не требует root-доступа.

Как это работает

В первую очередь, вам необходимо активировать то самое меню System UI Tuner, которое работает только на стабильной версии Android 6.0 Marshmallow. Некоторые превью-версии Android M не получили этой функции. Об активации UI Tuner можно прочесть в нашей соответствующей статье, но если вы не хотите переходить куда-то из этого материала, то: полностью откройте верхнюю «шторку» с быстрыми действиями и уведомлениями, зажмите кнопку с шестеренкой, которая ведет в меню настроек — все, System UI Tuner активирован. Теперь в общем меню настроек Android появился соответствующий пункт, но вам он практически не понадобится. Приложение Custom Quick Settings сделает все за вас.

Как сделать кнопку на андроиде

Далее установите само приложение Custom Quick Settings, которое доступно бесплатно, но с рекламой. Она удаляется через внутренние покупки — 99 рублей.

Как сделать кнопку на андроиде Как сделать кнопку на андроиде Как сделать кнопку на андроиде Как сделать кнопку на андроиде

После установки приложения кастомную кнопку с действием в верхнем меню можно добавить парой действий. По нажатию на плюс Custom Quick Settings можно выбрать название кнопки, ее действие — открытие любой заданной веб-страницы, запуск приложения, переход в какое-то подменю настроек или активация модуля. Для кнопки можно выбирать иконку (всего доступно стандартных; поддерживаются кастомные), а также дополнительное действие по долгому нажатию. Например, можно создать быструю ссылку на Трешбокс, а по долгому нажатию будет открываться наш паблик «ВКонтакте» или любой другой сайт — очень удобная вещь.

Возможности

Также можно сделать быстрое действие, которое подключит устройство к определенному Wi-Fi, присутствует в списке сохраненных. Кастомные кнопки с запуском приложений будут очень полезны — отпадает необходимость в переходе на рабочий стол для открытия нужной программы.

Возможности в плане создания быстрых действий очень ограничены — можно только задавать подключение к определенной сети Wi-Fi или устройству с Bluetooth. Здесь все упирается в функционал System UI Tuner.

Как сделать кнопку на андроиде Как сделать кнопку на андроиде

В Pro-версии приложения доступно добавление функциональных ярлыков с быстрыми действиями. Есть поддержка IFTTT. Стоит отметить, что все кастомные кнопки, добавленные с помощью Custom Quick Settings, не работают на экране блокировки — они просто не отображаются в «шторке», что довольно ожидаемо.

Напомним, все эти возможности также доступны на Android 5.0 / 5.1, но для этого необходимы Разработчик отмечает, что Custom Quick Settings не использует дополнительную энергию аккумулятора — программа запускается единожды при загрузке системы, а кастомные кнопки обновляются только после того, как это сделает пользователь.

Приятно видеть, как операционная система Android с каждой новой версией перенимает функции, которые ранее были доступны только с root-правами. Надеемся, что компания Google не удалит функцию System UI Tuner в будущем обновлении Android 6.0.1 или 6.1. Кстати, вы уже обновились до Marshmallow?

Источник

Как сделать кнопку на андроиде

Класс Button — самый используемый из всех элементов управления. Так как является наследником Textview, то использует многие знакомые нам атрибуты: textColor, textSize и другие.

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

Обработка событий

Принцип обработки событий прост: источник генерирует событие и посылает его одному или более слушателям (listener). В этой схеме слушатель просто ожидает до тех пор, пока не получит событие. Как только событие получено, слушатель обрабатывает его и возвращает управление.

В этой модели обработки событий слушатели должны:

Таким образом, чтобы создавать приложения, взаимодействующие с пользователем, необходимо:

Класс view содержит набор интерфейсов, которые называются on. Listener(), в каждом из которых объявлен единственный абстрактный метод обратного вызова. Этот метод необходимо переопределить в пользовательском классе. Его будет вызывать система Android, когда экземпляр view (или потомок), к которому был подсоединен слушатель события, вызывается пользовательским взаимодействием с интерфейсом приложения.

Всего класс view содержит шесть интерфейсов:

Обработка нажатия кнопки

Следующий пример реализует обработчик события onCiick(). Когда выполняется щелчок на кнопке, появляется сообщение, отображающее имя кнопки.

Создайте новый проект MyButton. Откройте файл разметки и разместите три кнопки с идентификаторами button1, button2 и button3, надписями «Button l», «Button 2» и «Button 3», а также две метки с идентификаторами textView1 и textView2 и надписями: у первой ”Нажата кнопка:”, а у второй оставляем значение по умолчанию ”TextView”. Графическая разметка с обозначениями представлена ниже.

Существует несколько способов обработки нажатия на кнопку. Рассмотрим их.

Первый способ

Первый способ разработан для Android и использует атрибут XML – onClick, который записывается в XML-коде элемента управления (в частности и Button), нажатие которого мы собираемся обрабатывать.

android:onClick=»onMyClick»

android:onClick – атрибут, которому присваивается имя метода обработки события

onMyClick – метод, который будет обрабатывать нажатие. Имя метода должно быть осмысленным. Сам метод записывается в программном коде активности.

В классе активности метод записывается в следующем формате:

Попробуем этот метод на практике. Сделайте следующее:

1. Для каждой кнопки в XML-коде кнопки запишете обработчик:

android:onClick=»onMyClick»

Обработчик будет один для всех кнопок.

2. В классе public class MainActivity extends Activity <

Запишем один метод onMyClick, который будет обрабатывать все кнопки

Выполните компиляцию проекта. При нажатии соответствующей кнопки в надписи под кнопками будет отображаться сообщение о нажатии этой кнопки.

Второй способ

Второй способ является традиционным для Java и использует интерфейсы. Для этого в нашем классе необходимо реализовать интерфейс View.OnClickListener. Данный интерфейс содержит единственный метод:

abstract void onClick(View v), который необходимо определить в нашем классе.

Подключение интерфейса выполняется следующим образом:

1. В классе public class MainActivity extends Activity напечатаете implements View.OnClickListener<.

Для написания используйте подсказки Eclipse: наберите слово i и нажмите комбинацию клавиш Ctrl+Space для вывода вариантов продолжения. Eclipse предложит ключевое слово implements, нажимаем Enter. Далее, набираем View, ставим точку, Eclipse предложит список вариантов, выбираем OnClickListener.

После этого будет сообщение об ошибке: подчеркнуто красной волнистой линией имя класса MainActivity, наводим на него курсор и выбираем «Add unimplemented methods».

Eclipse создаст заготовку метода onClick(View v):

2. В методе protected void onCreate(Bundle savedInstanceState) <

выполняем поиск наших кнопок (findViewById) и регистрируем каждую кнопку как слушателя событий с помощью метода setOnClickListener():

Все готово. Осталось написать код обработчика нажатия кнопок.

Для демонстрации второго метода обработки нажатия наших кнопок внесем в наш класс следующие изменения:

Удалим из XML-файла для всех кнопок

android:onClick=»onMyClick»

полностью заменим метод public void onMyClick(View v) < …>.

Напишем обработчик onClick(View v). Код этого обработчика повторяет код прежнего обработчика: различия только в названии метода и выводимом тексте.

Источник

Клавиатура и аппаратные кнопки

Аппаратные и клавиатурные клавиши

Обработка аппаратных клавиш и клавиатуры имеет следующие методы

Кроме клавиш, есть ещё другие методы обработки пользовательского ввода (здесь не рассматриваются):

Чтобы ваши компоненты и активности реагировали на нажатия клавиш, переопределите обработчики событий onKeyUp() и onKeyDown():

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

Параметр KeyEvent также включает в себя несколько методов: isAltPressed(), isShiftPressed() и isSymPressed(), определяющих, были ли нажаты функциональные клавиши, такие как Alt, Shift или Sym. Статический метод isModifierKey() принимает keyCode и определяет, является ли нажатая клавиша модификатором.

Кнопка Back: Вы уверены, что хотите выйти из программы?

Кнопка Back (Назад) закрывает приложение, точнее текущую активность, но если приложение состоит из одной активности, то это равносильно закрытию всего приложения. В большинстве случаев вам нет никакого дела до неуклюжего пользователя, который по ошибке нажал на кнопку «Back» вместо кнопки Подарить разработчику миллион. Но, если ваша программа, будучи запущенной на телефоне пользователя, потихоньку списывает деньги клиента в счёт Фонда голодных котов, то нужно дать ему шанс задуматься и вывести диалоговое окно с вопросом: «А действительно ли вы хотите выйти из программы?»

Чтобы реализовать такую задачу, нужно переопределить поведение кнопки «Back» через метод активности onBackPressed() следующим образом:

Данный метод появился в Android 2.0. Для более ранних версий использовался стандартный код обработки onKeyDown():

Двойное нажатие на кнопку Back

Кнопка Home

Можно отследить нажатие кнопки Home через метод активности onUserLeaveHint():

Обработка кнопки Menu

У телефона, кроме кнопки «Back», есть ещё кнопка «Menu» для вызова команд меню (на старых устройствах). Если необходимо обрабатывать нажатия этой кнопки (например, управление в игре), то используйте следующий код (обычное и долгое нажатие):

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

Другие кнопки

Ну на самом деле можно отслеживать не только нажатие кнопки Меню, но и кнопку Поиска и кнопки увеличения громкости.

Обратите внимание, что для кнопки громкости возвращаем false, т.е. мы не переопределяем поведение кнопки, а оставляем её на усмотрение системы.

Пример работы с кнопками громкости можно посмотреть в статье Рингтоны. Управление громкостью

По такому же принципу работает метод onKeyUp(). Метод onKeyLongPress() можно использовать, если в методе onKeyDown() был задействован метод event.startTracking(), отслеживающий поведение кнопки. В нашем примере мы отслеживали кнопку Volume_Up.

Прячем клавиатуру

Бывает так, что при запуске активности сразу выскакивает клавиатура. Если такое поведение не нравится, то пропишите в манифесте нужное значение у атрибута android:windowSoftInputMode (см. ниже).

В некоторых случаях хочется убрать клавиатуру с экрана, не нажимая кнопку «Back», а программно. В одном моём приложении, где было много текстовых полей, я воспользовался следующим кодом при щелчке кнопки:

Можно избавить компонент от фокуса:

Чтобы принудительно показать клавиатуру, используйте следующий код:

Кстати, повторный вызов метода закроет клавиатуру. Указанный способ не требует наличия элементов View.

Если продолжить тему показа клавиатуры, то может возникнуть следующая ситуация. Допустим у вас есть DialogFragment с EditText. При выводе диалогового окна вам нужно установить фокус на EditText и показать клавиатуру:

Либо используйте тег для нужного EditText.

Изменить вид клавиатуры для EditText

Когда элемент EditText получает фокус, то появляется клавиатура. Можно установить нужный вид клавиатуры через атрибут InputType или программно через метод setInputType():

Переопределяем кнопку Enter

Кроме атрибута InputType можно также использовать атрибут android:imeOptions в компоненте EditText, который позволяет заменить кнопку Enter на клавиатуре на другие кнопки, например, Next, Go, Search и др. Возможны следующие значения:

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

Чтобы реагировать на нажатия разных состояний кнопки Enter, необходимо реализовать интерфейс TextView.OnEditorActionListener. Небольшой пример:

В нашем примере если пользователь ищет что-то, не связанное с котом, то кнопка поиска не будет выполнять желание владельца устройства.

Также можно поменять текст на кнопке с помощью атрибута android:imeActionLabel:

Текст на кнопке поменялся, но вот обработка Enter из предыдущего примера у меня перестала работать. Мой неработающий код на память.

Upd: Читатель Максим Г. предложил следующее решение проблемы. Убираем атрибуты imeOptions, imeActionId, imeActionLabel и установим их программно.

По желанию можете отслеживать только у нужного поля. Поставьте дополнительное условие после первого блока if:

Интерфейс OnKeyListener

Чтобы среагировать на нажатие клавиши внутри существующего представления из активности, реализуйте интерфейс OnKeyListener и назначьте его для объекта View, используя метод setOnKeyListener(). Вместо того, чтобы реализовывать отдельные методы для событий нажатия и отпускания клавиш, OnKeyListener использует единое событие onKey().

Используйте параметр keyCode для получения клавиши, которая была нажата. Параметр KeyEvent нужен для распознавания типа события (нажатие представлено константой ACTION_DOWN, а отпускание — ACTION_UP).

Сдвигаем активность

Чтобы всплывающая клавиатура не заслоняла элемент интерфейса, который получил фокус, а сдвигала активность вверх, можно в манифесте для нужной активности прописать атрибут android:windowSoftInputMode с параметром adjustPan:

Также доступны и другие параметры:

Параметры с префиксом state можно комбинировать с настройками с префиксом adjust:

Например, чтобы показать клавиатуру при старте активности, используйте stateVisible.

Данные настройки доступны и программно. Например, код для adjustResize:

Кстати, этот код не сработает в полноэкранном режиме (флаг FLAG_FULLSCREEN). Сверяйтесь с документацией.

Узнать выбранный язык на клавиатуре

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

Следует быть осторожным с примером. На эмуляторе с Android 6.0 пример работал корректно. На реальных устройствах у меня корректно определялся русский язык, но при переключении на английский язык выдавал пустую строку или значение «zz». В этом случае можно прибегнуть к условиям if и проверять ожидаемое значение.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *