[英]How to Show Custom Dialog on OnBackPressed
每當有人單擊主 Activity 上的后退按鈕以退出應用程序時,我想顯示一個自定義對話框。
我嘗試了多種方法,但對我不起作用。 我只想在該對話框中有 4 個圖標(按鈕)和一個文本行以及“退出”應用程序選項。
你們有什么可行的解決方案可以建議嗎?
要在用戶單擊后退按鈕時執行操作,您可以簡單地覆蓋onBackPressed()
,以顯示您需要做兩件事的自定義對話框,首先使用 4 個按鈕和您想要的文本創建對話框的布局。
custom_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:background="#3E80B4"
android:orientation="vertical" >
<TextView
android:id="@+id/txt_dia"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp"
android:text="Your text goes here"
android:textColor="@android:color/white"
android:textSize="15dp"
android:textStyle="bold"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="#3E80B4"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_yes"
android:layout_width="100dp"
android:layout_height="30dp"
android:background="@android:color/white"
android:clickable="true"
android:text="Yes"
android:textColor="#5DBCD2"
android:textStyle="bold" />
<Button
android:id="@+id/btn_no"
android:layout_width="100dp"
android:layout_height="30dp"
android:layout_marginLeft="5dp"
android:background="@android:color/white"
android:clickable="true"
android:text="No"
android:textColor="#5DBCD2"
android:textStyle="bold" />
<Button
android:id="@+id/btn_exit"
android:layout_width="100dp"
android:layout_height="30dp"
android:layout_marginLeft="5dp"
android:background="@android:color/white"
android:clickable="true"
android:text="Exit"
android:textColor="#5DBCD2"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
然后創建自定義對話框 class 擴展Dialog
並實現OnClickListener
public class CustomDialogClass extends Dialog implements
android.view.View.OnClickListener {
public CustomDialogListener listener;
public Dialog d;
public Button yes, no, exit;
public CustomDialogClass(@NonNull Context context,
CustomDialogListener listener) {
super(context);
this.listener = listener ;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.custom_dialog);
yes = (Button) findViewById(R.id.btn_yes);
no = (Button) findViewById(R.id.btn_no);
exit = (Button) findViewById(R.id.btn_exit);
yes.setOnClickListener(this);
no.setOnClickListener(this);
exit.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_yes:
listener.onYesButtonClicked();
break;
case R.id.btn_no:
listener.onNoButtonClicked();
break;
case R.id.btn_exit:
listener.onExitButtonClicked();
break;
default:
break;
}
dismiss();
}
public interface CustomDialogListener {
public void onYesButtonClicked() ;
public void onNoButtonClicked() ;
public void onExitButtonClicked() ;
}
}
最后在 MainActivity class 上覆蓋onBackPressed()
,顯示對話框並處理所有按鈕點擊
@Override
public void onBackPressed() {
CustomDialogClass cd = new CustomDialogClass(this, new CustomDialogClass.CustomDialogListener() {
@Override
public void onYesButtonClicked() {
Toast.makeText(MainActivity.this, "Yes Clicked", Toast.LENGTH_LONG).show();
}
@Override
public void onNoButtonClicked() {
Toast.makeText(MainActivity.this, "No Clicked", Toast.LENGTH_LONG).show();
}
@Override
public void onExitButtonClicked() {
Toast.makeText(MainActivity.this, "Exit Clicked", Toast.LENGTH_LONG).show();
}
});
cd.show();
}
嘗試覆蓋您的主要活動onBackPressed()
function。 如果用戶按下后退按鈕,它將被觸發。 然后您可以彈出您的自定義對話框,如果在您的對話框上單擊退出按鈕,您可以調用super.onBackPressed()
或finish()
。 這將關閉您的應用程序。
更新
class MainActivity : AppCompatActivity() {
private var dialog: Dialog? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onBackPressed() {
if (dialog == null || dialog?.isShowing == false) {
dialog = AlertDialog.Builder(this)
.setTitle("Some title")
.setMessage("Some message")
.setPositiveButton("Exit") { dialog, which ->
super.onBackPressed()
}
.setNeutralButton("Action 1") { dialog, which ->
//DO SOME ACTION
dialog.cancel()
}
.setNegativeButton("Action 2") { dialog, which ->
//DO SOME ACTION
dialog.cancel()
}
.create()
dialog!!.show()
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.