android studio как закрыть приложение при нажатии на кнопку

Android. Работа с кнопками (Button), событие нажатия на кнопку в мобильном приложении

228 254 android btn

Подготовка

Создаем проект, выбираем Empty Activity, Activity Name: MainActivity, Layout Name: activity_main. В лайоуте /res/layout/activity_main.xml оставляем вывод текста TextView, добавляем кнопку Button и прописываем для каждого элемента свой id. После нажатия на кнопку будем выводить текст в TextView, который покажет, что событие было обработано.

В итоге /res/layout/activity_main.xml будет выглядеть примерно следующим образом:

Далее в MainActivity (MainActivity.java) добавим описание Button и TextView, для возможности обращения к ним из любого метода класса, инициализируем их в методе onCreate() и заполним с помощью метода findViewById():

Приступаем к обработке события нажатия на кнопку.

Обработка события нажатия на кнопку в приложении

1 способ. Обработка события нажатия с помощью метода setOnClickListener

Метод setOnClickListener() прослушивает событие нажатия на кнопку. В методе onCreate() вводим имя кнопки myButton, ставим точку (.) и вводим setO, далее студия сама предложит варианты, вот что получится:

Внутри скобок набираем new O, далее студия подскажет то что необходимо (OnClickListener), в итоге получим следующее:

Далее с помощью метода setText добавляем изменение текста в TextView:

В итоге обработчик нажатия на кнопку будет выглядеть так:

Сохраняем, запускаем приложение и жмем кнопку.

Полный код MainActivity (MainActivity.java):

Код метода OnClickListener() можно вынести отдельно, например для работы с несколькими кнопками. Создаем обработчик нажатия:

И присваиваем обработчик для кнопки:

В таком случае MainActivity (MainActivity.java) примет вид:

2 способ. Обработка события нажатия с помощью интерфейса OnClickListener

После добавления интерфейса строка будет подчеркнута красным, все из-за того что у нас еще нет метода onClick() интерфейса OnClickListener, чтобы это исправить жмем Alt + Enter (если при нажатии ничего не происходит, то проверьте текущую раскладку, при кириллической раскладке комбинация может не работать, переведите ввод на латинскую раскладку, например на английский) в любом месте подчеркивания, далее выбираем Implemente Methods в открывшимся окне выбираем onClick и жмем ok. После чего в конец класса MainActivity будет добавлен следующий код:

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

Далее в методе onCreate() назначим обработчик для кнопки, в качестве параметра передаем this, т.е. текущий объект:

Сохраняем, запускаем приложение и жмем кнопку.

Полный код MainActivity (MainActivity.java):

3 способ. Обработка события нажатия с помощью атрибута onClick

В данном способе необходимо добавить атрибут onClick для нужной кнопки, есть несколько способов добавления этого атрибута:

1) Открываем activity_main.xml, во вкладке «Design» жмем на нужную кнопку и в окне «Properties«, ищем свойство onClick и вводим в пустое поле название метода для обработки события нажатия кнопки.

a studio

2) Или откройте файл activity_main.xml в режиме «Text» и добавьте в элемент Button атрибут onClick с названием метода обработки нажатия кнопки:

В обоих случаях, код файла activity_main.xml будет выглядеть следующим образом:

Далее открываем класс MainActivity (MainActivity.java) и добавляем код метода clickMyBtn():

Сохраняем, запускаем приложение и жмем кнопку.

Полный код MainActivity (MainActivity.java):

3 в 1. Все 3 способа в одном примере

Далее для закрепления можно реализовать все три способа на одном экране, для этого в main_activity.xml добавим 3 кнопки, по одной кнопке на каждый способ, (полный код main_activity.xml):

И сам класс MainActivity со всеми тремя способами (файл MainActivity.java):

Сохраняем, запускаем, проверяем.

Один обработчик нажатия для нескольких кнопок

Часто необходимо сделать один обработчик нажатия для нескольких кнопок, т.к. функционал может практически не отличаться. Приведем пример для всех 3-х способов.

Один обработчик нажатия кнопки для 1-го способа, setOnClickListener

И так в main_activity.xml имеются 3 кнопки:

Открываем класс MainActivity (MainActivity.java) и в обработчик добавляем разный вывод текста в зависимости от нажатой кнопки с помощью конструкции выборки switch case:

И присваиваем кнопкам обработчик:

Сохраняем, запускаем, пробуем.

Полный код MainActivity (MainActivity.java):

Один обработчик нажатия кнопки для 2-го способа, интерфейс OnClickListener

В данном случае main_activity.xml оставляем как было описано выше (с тремя кнопками) и меняем код класса MainActivity. Добавляем интерфейс, реализацию метода onClick():

И присваиваем кнопкам обработчик:

Сохраняем, запускаем, пробуем.

Полный код класса MainActivity (MainActivity.java):

Один обработчик нажатия кнопки для 3-го способа, атрибут onClick

Для этого способа необходимо открыть activity_main.xml и добавить для всех кнопок атрибут android:onClick=»clickMyBtn», для всех кнопок один метод:

В класс MainActivity добавляем метод для обработки нажатия:

Сохраняем, запускаем, пробуем.

Полный код класса MainActivity будет выглядеть следующим образом (MainActivity.java):

Обработчик события непосредственно при нажатии на кнопку

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

В activity_main.xml добавим одну кнопку и текст:

А в класс MainActivity добавляем setOnTouchListener(), в метод onCreate():

Метод onTouch() содержит параметр MotionEvent, который позволяет настроить обработку в зависимости от касания.

Выведем в TextView информацию при нажатии на кнопку и отжатие:

Сохраняем, запускаем и пробуем.

Полный код класса MainActivity (MainActivity.java):

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

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

В классе MainActivity в методе onCreate() добавляем следующий код:

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

Так же можно отключить кнопку в activity_main.xml с помощью атрибута android:enabled=»false»:

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

4

Если у вас есть вопросы или предложения по улучшению кода описанного в статье пишите в комментариях.
Я всегда открыт к конструктивному диалогу

Источник

Как выйти из приложения Android с помощью кода?

Я уверен, что этот вопрос задавался несколько раз, потому что я мало читал. Мой клиент хочет, чтобы я нажал кнопку в его приложении, где пользователи могут нажать и выйти. Я прочитал это и нашел, что call finish() сделает это. Но, закончить – это только закрытие текущей текущей активности? У меня много действий, поэтому в этом случае я должен передать экземпляр каждого действия и закончить их или сделать каждое действие в шаблоне Singleton.

Я также узнал, что Activity.moveTaskToBack(true) может попасть на главный экран. ОК, это не закрытие, а фоновая обработка процесса. Так это эффективно?

Какой метод следует использовать для закрытия приложения ПОЛНОСТЬЮ? Любое из описанных выше или любого другого метода / другого использования вышеуказанных методов?

Вы можете вызвать System.exit (); Чтобы выйти из всех занятий.

Фактически каждый ищет закрытие приложения в событии onclick, где бы это ни было …

Итак, друзья друзей пробовали этот код. Поместите этот код в событие onclick

Если вы хотите выйти из приложения, используйте этот код внутри нажатой кнопки:

Это слишком легко. Используйте System.exit(0);

В общем, есть две ситуации. 1. Вы можете выйти из действия 2. Или вы хотите выйти из приложения.

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

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

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

Для моноразработки просто используйте

Попробуйте это по вызову. Я иногда использую его в onClick кнопки.

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

Прочитайте этот вопрос для большей ясности android – код выхода из приложения

Как насчет this.finishAffinity()

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

Призрачная активность, вызываемая с помощью singleletop и finish () на onCreate, должна делать трюк

Поместите это в свой onClic:

Просто используйте код в своем обратном порядке

Он работает, используя только moveTaskToBack(true);

Если вы используете EventBus (или действительно любую другую паб / вспомогательную библиотеку) в своем приложении для связи между действиями, вы можете отправить им явное событие:

Это очистит Task (стек действий) и начнет новую задачу

Если вы используете как завершение, так и выход из приложения,

Источник

Андроид выход из приложения при нажатии кнопки Назад

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

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

EDIT:

11 ответов

при нажатии клавиши back и затем завершения текущей деятельности(скажем), вы видите пустой деятельности с приложением логотип(например, B), это просто означает, что действие Б, которое показано после окончания еще в backstack, а также деятельность началась с активности B, т. е. в деятельности, вы должны начать деятельность с флагами как

Теперь ваша активность A сверху в стеке без каких-либо других действий вашего приложения на backstack.

Теперь в деятельности A если вы хотите реализовать onBackPressed, чтобы закрыть приложение, вы можете сделать что-то вроде этого,

У меня была та же проблема, у меня есть одна LoginActivity и одна MainActivity. Если я нажму кнопку «Назад» в MainActivity, приложение должно закрыться. Так я и сделал с onbackpressed методом. это moveTaskToBack () работает так же, как кнопка Home. Он оставляет заднюю стопку такой, какая она есть.

это означает вашу предыдущую деятельность в стеке, когда вы начинаете эту деятельность. Добавить finish(); после строки, в которой вы называете это действие.

во всей вашей предыдущей деятельности. когда вы начинаете новую деятельность, как-

добавить finish(); после этого.

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

вы также можете добавить finish () в код, но это, вероятно, избыточно, если вы также делаете систему.выход(0)

Finish не закрывает приложение, он просто закрывает активность. Если это действие запуска, оно закроет ваше приложение; если нет, оно вернется к предыдущему действию.

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

кажется, никто не рекомендовал noHistory= «true»в manifest.xml для предотвращения определенных действий после нажатия кнопки Назад, которая по умолчанию вызывает метод finish ()

это работает для меня.Я нашел его сам, объединив другие ответы

вместо finish() вызов super.onBackPressed()

чтобы выйти из приложения при нажатии кнопки «назад», вы должны сначала очистить все основные действия, а затем запустить ACTION_MAIN телефона android

Итак, вы должны написать весь этот код, который упоминается ниже:

Примечание: В вашем случае MainActivity заменяется YourActivity

Источник

Android: закрытие приложения по кнопке «назад»

Подскажите, пожалуйста, как правильно закрывать приложение по нажатию кнопки «назад»? Сейчас использую вот такой код (в Activity):

Но что-то мне говорит, что это не совсем верно и избыточно. Приложение — игра с libgdx, используется только одно Activity.

a1c0702f655b7673d5f08e44459cbf96

Когда Вы закрываете приложение кнопной «Назад», то вызывается метод onDestroy(). Для этого перехватывать нажатие этой кнопки в методе onBackPressed() не имеет смысла. Достаточно сделать так:

public void onDestroy() <
moveTaskToBack(true);

Перехватывать нажатие кнопки «Назад» имеет смысл тогда, когда надо реализовать подтверждение выхода из игры или что-то в этом роде.

Как правильно завершить свой поток в Actitvity в onDestroy? Не подумайте чего — все облазил — каких методов только не предлагается. Но видимо так?

А если еще и SurfaceView используется, то нужно его принудительно завершать? удалять калбак из него? finish() при использовании SurfaceView не всегда закрывает приложение корректно — иногда появлzется исключение — видимо не закрывается поток рисования в SurfaceView, хотя в SurfaceView.onDestroy и делается drawingThread.interrupt().

Короче у меня работоспособный вариант выглядит так примерно ACTIVITY:

Но при этом у потока backgroundThread есть «чудо» переменная indicatorOfWork

Тогда как должен выглядеть для кнопки НАЗАД этот метод?

а то все возможные варианты, что приходили на ум давали исключение при нажатии Назад

Источник

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

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

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

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

Чтобы ваши компоненты и активности реагировали на нажатия клавиш, переопределите обработчики событий 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 и проверять ожидаемое значение.

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • android studio значок приложения
  • android studio защита приложения