本文演示如何开发按BACK弹出退出游戏的Dialog对话框。
自定义Dialog需要一个Style文件,Layout文件。
style文件用来设置对话框的样式(主题)。
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="DialogExit" parent="@android:Theme.Dialog"> <item name="android:windowFrame">@null</item> <!--是否有标题--> <item name="android:windowNoTitle">true</item> <!--对话框是否浮动--><!-- 如果不是浮动,对话框就会变成全屏--> <item name="android:windowIsFloating">true</item> <!--对话框是否有遮盖--> <item name="android:windowContentOverlay">@null</item> <!--设置是否背景模糊--> <item name="android:backgroundDimEnabled">false</item> <!--背景灰度--> <item name="android:backgroundDimAmount">0.1</item> <!--此对话框的背景--> <item name="android:windowBackground">@drawable/rect</item> </style> </resources>
Layout文件用来设置对话框的按钮文字等信息
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="top" > <RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:padding="5dip" > <TextView android:id="@+id/dialog_eixt_message" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="5dip" android:text="消息" android:textColor="#FFFFFF" /> <TableRow android:id="@+id/dialog_eixt_tablerow" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/dialog_eixt_message" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:gravity="center_horizontal"> <Button android:id="@+id/dialog_eixt_okbutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/button" android:text="确定" android:textColor="#ffffff" android:textSize="15sp" android:paddingLeft="10dip" android:paddingRight="10dip" android:paddingTop="5dip" android:paddingBottom="5dip"/> <Button android:layout_marginLeft="25dip" android:id="@+id/dialog_eixt_cancelbutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/button" android:text="取消" android:textColor="#ffffff" android:textSize="15sp" android:paddingLeft="10dip" android:paddingRight="10dip" android:paddingTop="5dip" android:paddingBottom="5dip" /> </TableRow> </RelativeLayout> </RelativeLayout>
接下来就是在代码中的运用!
新建一个类,继承DIalog,然后对文字信息进行修改,以及监听按钮之后的处理
package com.imf.view.util;
import com.imf.R;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
/**
* 退出游戏对话框
*/
public class DialogExit extends Dialog {
Context context;
public DialogExit(Context context) {
super(context);
// TODO Auto-generated constructor stub
this.context = context;
}
public DialogExit(Context context, int theme){
super(context, theme);
this.context = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//加载layout布局文件
this.setContentView(R.layout.dialog_exit);
TextView info = (TextView) findViewById(R.id.dialog_eixt_message);
info.setText("您确定退出游戏?");
Button btnok = (Button) findViewById(R.id.dialog_eixt_okbutton);
btnok.setOnClickListener(new Button.OnClickListener() {
public void onClick(View view) {
//关闭进程,就是关闭游戏。
android.os.Process.killProcess(android.os.Process.myPid());
}
});
Button btnexit = (Button) findViewById(R.id.dialog_eixt_cancelbutton);
btnexit.setOnClickListener(new Button.OnClickListener() {
public void onClick(View view) {
//如果按的是取消,那么就dismiss();
dismiss();
}
});
}
}
在某Activity上面监听按下back键,进行处理
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
//在这里设置style主题文件。
DialogExit dialog = new DialogExit(MainActivity.this,
R.style.DialogExit);
dialog.show();
return true;
}
return super.onKeyDown(keyCode, event);
}