【读书笔记《Android游戏编程之从零开始》】7.Android 游戏开发常用的系统控件(Dialog)

在Android应用开发中,Dialog(对话框)创建简单且易于管理因而经常用到,对话框默认样式类似创建样式的Activity。
首先介绍android.app.AlertDialog下的Builder这个类。Builder是AlertDialog类的子类,而且还是它的内部类。正如其名所示,Builder相当于一个具体的构造者,通过Builder设置对话框属性,然后将Builder(对话框)显示出来。

本人做了个Dialog显示效果集合的小Demo,效果如下(GIF图片较大,需要点加载时间):

 

主要代码:

package yc.example.dialogshow;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private static AlertDialog.Builder builder;
    private static Dialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void Btn1_Onclick(View view) {
        // 实例化Builder
        builder = new AlertDialog.Builder(MainActivity.this);
        // 设置对话框的图标
        // builder.setIcon(R.drawable.ic_launcher);
        builder.setIcon(android.R.drawable.ic_dialog_info);
        // 设置对话框的图标
        builder.setTitle("对话框标题");
        // 设置对话框的提示文本
        builder.setMessage("对话框的提示文本");
        builder.setPositiveButton("确定", new OnClickListener() {
            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                Toast.makeText(MainActivity.this, "这是一个简单的对话框",
                        Toast.LENGTH_SHORT).show();
            }
        });
        // 调用show()方法显示对话框
        builder.show();
    }

    public void Btn2_Onclick(View view) {
        dialog = new AlertDialog.Builder(this).setIcon(R.drawable.ic_launcher)
                .setTitle("提示").setMessage("确认退出吗?")
                .setPositiveButton("确定", null).setNegativeButton("取消", null)
                .show();
    }

    public void Btn3_Onclick(View view) {
        dialog = new AlertDialog.Builder(this)
                .setIcon(android.R.drawable.btn_star).setTitle("喜好调查")
                .setMessage("您喜欢玩LOL吗?").setPositiveButton("很喜欢", null)// 监听P型按钮,正极性;
                .setNegativeButton("不喜欢", null)// 监听N型按钮,负极性;
                .setNeutralButton("一般", null)// 监听中性按钮,一般位于中间
                .show();
    }

    public void Btn4_Onclick(View view) {
        dialog = new AlertDialog.Builder(this)
                .setIcon(android.R.drawable.ic_dialog_info).setTitle("请输入")
                /*
                 * setView()方法是往对话框中添加系统组件,但只能设置一个组件,如果多次使用,先设置的组件会被后设置的组件替换掉
                 * setView()添加一个系统组件的布局,默认都放在对话框的最下方(按钮上面)
                 */
                .setView(new EditText(this)).setPositiveButton("确定", null)
                .setNegativeButton("取消", null).show();
    }

    public void Btn5_Onclick(View view) {
        final String[] WuJiang = new String[] { "关羽", "张飞", "吕布", "赵云", "马超" };
        dialog = new AlertDialog.Builder(this).setTitle("请选择你的初始武将")
                .setIcon(android.R.drawable.ic_dialog_info)
                /*
                 * 添加单选框的方法: setSingleChoiceItems(CharSequence[] items, int
                 * checkedItem, OnClickListener listener) items:表示单选的各项文本
                 * checkedItem:表示单选中默认选中的下标 listener:单击监听器
                 */
                .setSingleChoiceItems(WuJiang, 0, new OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this,
                                "你选择的武将是:" + WuJiang[which], Toast.LENGTH_SHORT)
                                .show();
                        dialog.dismiss();
                    }
                }).show();
    }

    public void Btn6_Onclick(View view) {
        dialog = new AlertDialog.Builder(this)
                .setTitle("请选择你喜欢的运动")
                /*
                 * 添加复选框的方法: setMultiChoiceItems(CharSequence[] items, boolean[]
                 * checkedItems, OnMultiChoiceClickListener listener)
                 * items:表示复选文本的各项文本; checkedItems:表示复选的各项选中状态; listener:多选单击监听器
                 */
                .setMultiChoiceItems(
                        new String[] { "篮球", "足球", "游泳", "赛车", "跑步" }, null,
                        null).setPositiveButton("确定", null)
                .setNegativeButton("取消", null).show();
    }

    public void Btn7_Onclick(View view) {
        dialog = new AlertDialog.Builder(this)
                .setTitle("武将列表")
                .setItems(new String[] { "吕奉先", "赵子龙", "恶来典韦", "关云长", "张翼德" },
                        null).setPositiveButton("确定", null)
                .setNegativeButton("取消", null).show();
    }

    public void Btn8_Onclick(View view) {
        ImageView img = new ImageView(this);
        img.setImageResource(R.drawable.goodby_times);
        dialog = new AlertDialog.Builder(this).setTitle("再见,时光!").setView(img)
                .setPositiveButton("确定", null).show();
    }

    public void Btn9_Onclick(View view) {
        // 实例化Layout布局
        LayoutInflater inflater = getLayoutInflater();
        View layout = inflater.inflate(R.layout.dialog1,
                (ViewGroup) findViewById(R.id.dialog_layout));
        Button btn_Login = (Button) layout.findViewById(R.id.btn_Login);
        final EditText uname = (EditText) layout.findViewById(R.id.uname);
        final EditText pwd = (EditText) layout.findViewById(R.id.pwd);
        btn_Login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "用户名:"+uname.getText()+"\n密码:"+pwd.getText(),
                        Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });
        dialog = new AlertDialog.Builder(this).setTitle("用户登录").setView(layout)
                .show();
    }

    // 进度读取框需要模拟读取
    private ProgressDialog progressDialog = null;
    private final static int MAX_READPROCESS = 100;

    public void Btn10_Onclick(View view) {
        progressDialog = new ProgressDialog(MainActivity.this);
        progressDialog.setIcon(android.R.drawable.ic_dialog_info);
        progressDialog.setProgress(0);
        progressDialog.setTitle("程序下载中...");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setMax(MAX_READPROCESS);
        progressDialog.show();
        new Thread(progress).start();
    }

    // 新开启一个线程,循环的累加,一直到100然后在停止
    Runnable progress = new Runnable() {

        @Override
        public void run() {
            int Progress = 0;
            while (Progress < MAX_READPROCESS) {
                try {
                    Thread.sleep(50);
                    progressDialog.setProgress(++Progress);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
             //读取完了以后窗口自消失 
            progressDialog.cancel();
        }
    };
    

    public void Btn11_Onclick(View view) {
        progressDialog= new ProgressDialog(MainActivity.this); 
        progressDialog.setMessage("正在为你努力加载数据..."); 
        progressDialog.setIndeterminate(true); 
        progressDialog.setCancelable(true); 
        progressDialog.show(); 
    }
}
MainActivity.class

 

源代码:DialogShow.zip

posted @ 2014-05-23 17:07  叶超Luka  阅读(1026)  评论(0编辑  收藏  举报