Как в андроид студио сделать кнопку выхода из приложения
Я нашел несколько кодов для выхода из приложения Android программно. Вызов любого из следующего кода в onDestroy() полностью закроет приложение?
Я не хочу запускать приложение в фоновом режиме после нажатия кнопки "Выйти". Просьба предложить мне использовать любой из этих кодов для выхода из приложения? Если да, какой код я могу использовать? Это хороший способ выйти из приложения в Android?
Начиная с API 16, вы можете использовать метод finishAffinity, который, кажется, довольно близок к закрытию всех связанных действий по его имени и описанию Javadoc:
this.finishAffinity ();
Завершите это действие, а также все действия непосредственно под ним в текущем задании, которые имеют ту же привязку. Это обычно используется, когда приложение может быть запущено для другой задачи (например, из ACTION_VIEW типа контента, который он понимает), и пользователь использовал навигацию вверх для переключения из текущей задачи в свою собственную. В этом случае, если пользователь перешел к другим активным действиям второго приложения, все они должны быть удалены из исходной задачи как часть переключения задачи.
Обратите внимание, что это завершение не позволяет вам доставлять результаты к предыдущему действию, и будет выдано исключение, если вы попытаетесь это сделать.
Начиная с API 21 вы можете использовать очень похожую команду
finishAndRemoveTask();
Завершает все действия в этой задаче и удаляет ее из списка недавних задач.
это лучший способ выйти из приложения.
Лучшее решение для меня.
Если вы будете использовать только finishAffinity(); без System.exit(0); Ваше приложение будет закрыто, но выделенная память все еще будет использоваться вашим телефоном, так что. если вы хотите полностью очистить приложение, используйте оба из них.
Это самый простой метод, который работает где угодно, выйдите из приложения по-настоящему, у вас может быть много открытых действий, и все будет без проблем.
пример по нажатию кнопки
или если вы хотите что-то приятное, например, с диалоговым окном предупреждения с 3 кнопками ДА НЕТ и ОТМЕНА
Пожалуйста, подумайте над тем, нужно ли вам убить приложение: почему бы не позволить ОС выяснить, где и когда освободить ресурсы?
В противном случае, если вы абсолютно уверены, используйте
В ответ на комментарий @dave Appleton: во-первых, прочитайте большой комбо-вопрос @ gabriel, опубликованный: " Не одобряется ли выход из приложения?
Теперь, предполагая, что у нас это есть, вопрос здесь по-прежнему имеет ответ: код, который вам нужен, если вы что-то делаете с выходом finish() , Очевидно, что вы можете иметь более одного вида деятельности и т. Д., Но это не главное. Позволяет управлять некоторыми из вариантов использования
- Вы хотите, чтобы пользователь прекратил все из-за использования памяти и "не работал в фоновом режиме?" Сомнительно. Позвольте пользователю остановить определенные действия в фоновом режиме, но позвольте ОС уничтожить все ненужные ресурсы.
- Вы хотите, чтобы пользователь не переходил к предыдущей активности вашего приложения? Ну, либо настройте его так, чтобы он не работал, либо вам нужна дополнительная опция. Если большую часть времени работает задняя часть = предыдущая активность, не будет ли пользователь просто нажать домой, если он / она хочет сделать что-то еще?
- Если вам нужен какой-то сброс, вы можете выяснить, было ли / как / и т.д. ваше приложение завершено, и если ваша активность снова сфокусировалась, вы можете принять меры, показав новый экран вместо того, чтобы перезапустить, где вы были.
Итак, в конце концов, конечно, finish() не убивает ничего, но это все еще инструмент, который вам нужен, я думаю. Если есть вариант "убить все действия", я его еще не нашел.
Создать ExitActivity и объявить это в манифесте. И позвонить ExitActivity.exit(context) для выхода из приложения.
В Android нет выхода из приложения, SampleActivity.this.finish(); завершит текущую деятельность.
Когда вы переключаетесь с одного занятия на другое, продолжайте заканчивать предыдущее
Я думаю, что приложение должно быть убито в некоторых случаях. Например, есть приложение, которое можно использовать только после входа в систему. У входа в систему есть две кнопки: "Войти" и "Отмена". Когда вы нажимаете кнопку "Отмена", это определенно означает "Завершить приложение". Никто не хочет приложение живым в фоновом режиме. Поэтому я согласен, что в некоторых случаях необходимо закрыть приложение.
Прежде всего, этот подход требует минимального Api 16.
Я разделю это решение на 3 части для более широкого решения этой проблемы.
1. Если вы хотите выйти из приложения в Activity, используйте этот фрагмент кода:
2. Если вы хотите выйти из приложения в классе, отличном от Activity, у которого есть доступ к Activity, используйте этот фрагмент кода:
3. Если вы хотите выйти из приложения в классе, отличном от Activity, и не можете получить доступ к Activity, например Service, я рекомендую вам использовать BroadcastReceiver. Вы можете добавить этот подход ко всем своим действиям в вашем проекте.
Создайте переменные экземпляра LocalBroadcastManager и BroadcastReceiver. Вы можете заменить getPackageName()+". Closeapp", если хотите.
Добавьте их к методу onCreate() Activity.
Ты можешь использовать finishAndRemoveTask () из API 21
public void finishAndRemoveTask ()
Завершает все действия в этой задаче и удаляет ее из списка недавних задач.
Вы лучше использовали finish() если вы находитесь в Activity , или же getActivity().finish() если вы в Fragment ,
Если вы хотите полностью выйти из приложения, используйте:
Это зависит от того, как быстро вы хотите закрыть приложение.
Безопасный способ закрыть ваше приложение - finishAffinity();
После закрытия всех процессов приложение закрывается. Это может занять некоторое время. Если вы закроете свое приложение таким образом и через короткое время перезапустите его, возможно, ваше новое приложение будет запущено в том же процессе. Со всеми незавершенными процессами и одиночными объектами старого приложения.
Если вы хотите быть уверены, что ваше приложение закрыто полностью, используйте System.exit(0);
Это немедленно закроет ваше приложение. Но возможно, что вы повредите файлы, которые открыло ваше приложение, или редактирование общих настроек не завершится. Так что используйте это осторожно.
Если вы используете сторожевой таймер в сочетании с долгосрочным заданием, вы можете увидеть влияние различных методов.
Это убивает ваше приложение через 2 секунды без отображения диалога ANR или чего-то в этом роде. Если вы удалите System.exit (0), запустите этот код и перезапустите приложение после его закрытия, вы столкнетесь с некоторым странным поведением, потому что бесконечный цикл все еще работает.
Аналогично @MobileMateo, но в Котлине
Простой и простой способ выйти из приложения
Мы хотим, чтобы код был надежным и простым. Это решение работает на старых устройствах и более новых устройствах.
Я думаю, что вы ищете это
Я не уверен, если это осуждается или нет, но это то, как я это делаю.
Шаг 1 - У меня обычно есть класс, который содержит методы и переменные, к которым я хочу получить глобальный доступ. В этом примере я назову это классом "App". Создайте статическую переменную Activity внутри класса для каждого действия, которое есть в вашем приложении. Затем создайте статический метод с именем "close", который будет запускать finish() Метод для каждой из этих переменных деятельности, если они не являются нулевыми. Если у вас есть основное / родительское действие, закройте его последним:
Шаг 2 - в каждом из ваших действий, переопределите onStart() а также onDestroy() методы. В onStart() установите статическую переменную в вашем классе приложения равной " this ". В onDestroy() установите его равным null , Например, в классе "Activity1":
Шаг 3 - Когда вы хотите закрыть приложение, просто позвоните App.close() откуда угодно. Все созданные экземпляры будут закрыты! Поскольку вы только закрываете действия, а не убиваете само приложение (как в ваших примерах), Android может взять на себя ответственность и выполнить любую необходимую очистку.
Опять же, я не знаю, будет ли это осуждено по любой причине. Если это так, я хотел бы прочитать комментарии о том, почему это так и как это можно улучшить!
Одним из важных компонентов пользовательского интерфейса в приложения является кнопка. Она используется для выполнения различных действий пользователя.
В этой статье мы приведём примеры использования и стилизации кнопки.
Добавляем кнопку на разметку
Пользовательский интерфейс приложения определён в XML-файле с разметкой. Вы можете добавить элемент Button и установить атрибуты вручную. Или вы можете, воспользовавшись инструментом дизайна, добавить Button из палитры элементов и задать атрибуты.
Атрибуты кнопки
Button является подклассом TextView и наследует атрибуты от TextView и View. Ниже приведены некоторые важные атрибуты кнопки, которые можно использовать для настройки стиля и поведения.
- background: установка в качестве фона как цвета, так и drawable
- onClick: установить метод, который будет запускаться при нажатии на кнопку
- minHeight: для определения минимальной высоты кнопки
- minWidth: для определения минимальной ширины кнопки
- stateListAnimator: определение анимации при изменении состояния кнопки
- focusable: для определения того, будет ли обработано нажатие клавиши
- clickable: указать, является ли кнопка кликабельной
- gravity: установка выравнивания текста кнопки
- textAppearance: установить стиль текста
Включение и выключение кнопки
Вы можете использовать атрибут enabled для включения или выключения кнопки, установив его в true или false. Также это можно сделать программно, вызвав метод setEnabled(), как показано ниже:
Кнопка с Drawable
Вы можете отображать на кнопке вместе с текстом изображение, используя drawableTop, drawableRight, drawableBottom или drawableLeft, в зависимости от того, где располагать картинку, как показано на скриншоте ниже.
ImageButton
Android также предоставляет ImageButton, задачей которого является использование изображения в качестве кнопки. Чтобы установить изображение, вы можете использовать атрибут src. Вы также можете использовать разные изображения, которые будут меняться в зависимости от состояния кнопки, меняя в XML drawable selector как показано ниже.
Пример XML drawable selector
Обработка нажатий на кнопку
Чтобы установить атрибут onClick, сначала определите метод типа void, принимающий в качестве параметра View, в активности или фрагменте и затем используйте имя этого метода как значение для атрибута onClick, как показано ниже.
Ниже приведён код обработки нажатия с помощью слушателя.
Дизайн и стили кнопок
Вы можете применять стили и темы для изменения внешнего вида кнопок. Платформа Android предоставляет заранее определённые стили. На рисунке ниже вы можете увидеть, как отображаются кнопки с различными стилями.
Пример применения темы для кнопки.
Настройка стилей кнопок
Вы можете изменить цвета по умолчанию для стилей, применяемых к кнопке, установив атрибут colorAccent на уровне приложения и атрибут colorButtonNormal на уровне виджета для нужных цветов. Атрибут colorControlHighlight используется для установки цвета кнопки, когда она находится в нажатом состоянии.
Как только вы определите собственный стиль, вы можете применить его к кнопкам с помощью атрибута theme. Ниже приведен пример пользовательской темы.
Кнопка с закруглёнными углами
Вы можете определить элемент inset, как показано ниже, чтобы создать кнопку с закруглёнными углами и сохранить файл с drawable в папке res/drawable. Вы можете увеличить или уменьшить атрибут радиуса элемента, чтобы отрегулировать радиус углов кнопки.
Затем определите стиль, задающий атрибут background для xml drawable и примените его к кнопке с помощью атрибута style.
Высота и тень кнопки
Вы можете установить атрибуты elevation и translationZ, чтобы нарисовать тень кнопки.
Настройка анимации тени
Вы можете определить различные свойства теней для разных состояний кнопки и анимировать переход путём определения селектора. Вы можете применить аниматор к кнопке, используя свойство stateListAnimator.
Обратите внимание, что stateListAnimator установлен в null в приведённом выше примере. Это было сделано для удаления аниматора по умолчанию, чтобы elevation и translationZ работали.
Чтобы настроить анимацию тени при изменении состояния кнопок, вам нужно определить селектор, как показано ниже, в папке res/animator и установить свойство stateListAnimator своей темы для определённого аниматора.
Примените следующую тему, которая использует аниматор, к кнопке с использованием атрибута style или theme.
Простая кнопка логина
Совмещая всё вышесказанное, можно создать красивую кнопку, позволяющую, например, заходить пользователям на свои аккаунты. Код разметки будет выглядеть следующим образом:
Кроме того, с помощью атрибута drawableLeft можно добавить изображение к нашей кнопке, в том числе и векторное. На старых устройствах, векторные изображения вызывают падение всего приложения, поэтому сделаем это программно в коде активности при помощи AppCompatResources:
Метод setCompoundDrawablesWithIntrinsicBounds() делает то же, что и атрибуты drawableLeft, drawableTop и так далее. В качестве параметров нужно указать, где именно будет размещаться изображение (указываем null в случае, если здесь изображение не нужно).
в моем приложении я хочу, чтобы выйти из приложения при нажатии кнопки назад, это мой код:
EDIT:
Я использую этот код вместо выше, но мое приложение полностью выходит, но я хочу, чтобы он работал в фоновом режиме и не выходит полностью , как я могу это сделать это?
при нажатии клавиши back и затем завершения текущей деятельности(скажем), вы видите пустой деятельности с приложением логотип(например, B), это просто означает, что действие Б, которое показано после окончания еще в backstack, а также деятельность началась с активности B, т. е. в деятельности, вы должны начать деятельность с флагами как
Теперь ваша активность A сверху в стеке без каких-либо других действий вашего приложения на backstack.
Теперь в деятельности A если вы хотите реализовать onBackPressed, чтобы закрыть приложение, вы можете сделать что-то вроде этого,
обработчик здесь обрабатывает случайные обратные нажатия, он просто показывает Toast , а если еще нажать в течение 3 секунд, он закрывает приложение.
это означает вашу предыдущую деятельность в стеке, когда вы начинаете эту деятельность. Добавить finish(); после строки, в которой вы называете это действие.
во всей вашей предыдущей деятельности. когда вы начинаете новую деятельность, как-
добавить finish(); после этого.
в моем понимании Google хочет, чтобы Android обрабатывал управление памятью и выключал приложения. Если вы должны выйти из приложения из кода, может быть полезно попросить Android запустить сборщик мусора.
вы также можете добавить finish () в код, но это, вероятно, избыточно, если вы также делаете систему.выход(0)
Finish не закрывает приложение, он просто закрывает активность. Если это действие запуска, оно закроет ваше приложение; если нет, оно вернется к предыдущему действию.
Что вы можете сделать, это использовать onActivityResult для запуска столько finish (), сколько необходимо, чтобы закрыть все открытые действия.
это работает для меня.Я нашел его сам, объединив другие ответы
вместо finish() вызов super.onBackPressed()
чтобы выйти из приложения при нажатии кнопки "назад", вы должны сначала очистить все основные действия, а затем запустить ACTION_MAIN телефона android
1- Android Button
В Android, Button это "контроль пользовательского интерфейса" (user interface control), который используется для выполнения действия, когда пользователь кликает (click) на него.
В иерархии классов, Button это подкласс у TextView, поэтому он наследует все свойства у TextView.
По умолчанию, при отображении содержания, текст у Button превратится в прописные буквы (uppercase), вам нужно настроить android:textAllCaps="false" чтобы удостовериться, что содержание отобразится как в оригинале.
Атрибут android:gravity используется для настройки отображения текста Button. Его значение это сочетание следующих значений:
Constant in Java | Value | Description |
Gravity.LEFT | left | |
Gravity.CENTER_HORIZONTAL | center_horizontal | |
Gravity.RIGHT | right | |
Gravity.TOP | top | |
Gravity.CENTER_VERTICAL | center_vertical | |
Gravity.BOTTOM | bottom | |
Gravity.START | start | |
Gravity.END | end | |
Gravity.CENTER | center | |
Android позволяет вам добавить 4 icon в один Button через атрибуты android:drawableLef, android:drawableTop, android:drawableRight, android:drawableBottom, android:drawableStart, android:drawableEnd.
Android 4.1 начинает поддерживать разницу в лэйауте текстов разных языков. Точнее в английском, текст написан слева на право, в то время как в арабском, текст написан справа на лево.
В режиме лэйаута LTR (Left to Right): Атрибут android:drawableStart будет работать как android:drawableLeft, и android:drawableEnd будет работать как android:drawableRight.
В режиме лэйаута RTL (Right to Left): Атрибут android:drawableStart будет работать как android:drawableRight, и android:drawableEnd будет работать как android:drawableStart.
2- Button Click Event
Событие Click (Клик) происходит когда пользователь нажимает (Press down) и отпускает (Release) Button.
Вы можете определить название метода, который будет вызван когда пользователь кликает (click) на Button используя атрибут android.onClick.
В то же время, создайте данный метод в классе MainActivity.
Вы так же можете определить метод, который будет вызван, когда пользователь кликает на Button, полностью с Java кодом:
3- Button Long Click Event
Событие Long Click (Длинный клик) в Android происходит когда пользователь нажимает (Press down) View и долго держит таким образом. Точнее, событие произойдет во время LONG_PRESS_TIMEOUT в милисекунду, когда пользователь нажиает(Press down). Вы можете получить значение LONG_PRESS_TIMEOUT из метода ViewConfiguration.getLongPressTimeout().
Продолжительность по умолчанию длинного клика (Long-Click) в Android это DEFAULT_LONG_PRESS_TIMEOUT милисекунды. Пользоваетль может поменять продолжительность длинного клика (Long-Click) в Settings (настройках) устройства, он будет применен ко всем приложениям в системе. Разработчики приложений не могут понять данное значение.
Например: Событие когда пользователь нажимает Long Click (Длинный клик) на Button с помощью Java кода(Заметьте, что вы не можете сделать это с XML).
Если пользователь кликает (click) на View на долгое время (Больше чем LONG_PRESS_TIMEOUT милисекунды), он может генерировать 2 последовательных события это Long-Click и Click.
Метод onLongClick(View) возвращает значение boolean. Если возвращает true, значит вы истратили событие Long-Click, и событие Click, которое происходит после, будет пропущено. Наоборот, если метод onLongClick(View) возвращает значение false, это значит событие Click, которое происходит потом будет выполнено.
4- Пример Android Button
Это простой пример, пользователь введет 2 числа и нажмет Button, чтобы посчитать сумму этих 2-х чисел.
Читайте также: