У класса активности есть метод onBackPressed(), позволяющий отслеживать нажатие на кнопку Back на устройстве Android.
Если этот метод переопределить в классе активности и вызвать в нем метод finish(), то текущая активность будет закрыта.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onBackPressed(){
finish();
}
}
Чтобы показать диалоговое окно с текстом ("Вы точно хотите выйти из приложения?"), то можно в этот метод вставить следующий код:
AlertDialog.Builder quitDialog = new AlertDialog.Builder(this);
quitDialog.setTitle("Вы точно хотите выйти из приложения?");
quitDialog.setPositiveButton("Да", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
quitDialog.setNegativeButton("Нет", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// ничего не делать, если нажали нет
}
});
quitDialog.show();
В коде создается диалоговое окно с текстом, задается текст кнопок и навешиваются обработчики события нажатия кнопок.
При нажатии на кнопку "Да", вызывается метод finish() у текущей активности.
В последней строчке quitDialog.show() функция show() показывает это окно пользователю.
Для создания кнопки выхода из приложения (с выводом диалогового окна) можно этот же код вставить в обработчик нажатия , немного изменив получение контекста при создании экземпляра класса AlertDialog.Builder:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button exitButton = findViewById(R.id.exit);
exitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder quitDialog = new AlertDialog.Builder(MainActivity.this);
quitDialog.setTitle("Вы точно хотите выйти из приложения?");
quitDialog.setPositiveButton("Да", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
quitDialog.setNegativeButton("Нет", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
quitDialog.show();
}
});
}
}
Но более общим был бы код, реализующий это функционал и для кнопки выхода внутри приложения и для кнопки на самом устройстве:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button exitButton = findViewById(R.id.exit);
exitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
@Override
public void onBackPressed(){
AlertDialog.Builder quitDialog = new AlertDialog.Builder(this);
quitDialog.setTitle("Вы точно хотите выйти из приложения?");
quitDialog.setPositiveButton("Да", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
quitDialog.setNegativeButton("Нет", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//
}
});
quitDialog.show();
}
}