Android的Dialog开发和运用

本文演示如何开发按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);
	}

相关推荐