灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3403回复:0

Android 程式开发:(一)详解活动 —— 1.4 显示普通对话框

楼主#
更多 发布于:2012-09-06 14:03

有的时候,可能需要弹出一个对话框,以便从用户的输入来获取某些确认信息。这种情况下,可以重写Activity基类中的受保护方法(protected)onCreateDialog()。
1、创建一个工程:Dialog。

2、main.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="fill_parent"
    Android:orientation="vertical" >
    
<Button
    Android:id="@+id/btn_dialog"
    Android:layout_width="fill_parent"  
    Android:layout_height="wrap_content"
    Android:text="Click to display a dialog"
    Android:onClick="onClick" />
  
</LinearLayout>

3、DialogActivity.java中的代码。

package net.horsttnann.Dialog;

import Android.app.Activity;
import Android.app.AlertDialog;
import Android.app.Dialog;
import Android.content.Dialoginterface;
import Android.os.Bundle;
import Android.view.View;
import Android.widget.Toast;

public class DialogActivity extends Activity {
    CharSequence[] items = { "google", "Apple", "Microsoft" };
    boolean[] itemsChecked = new boolean[items.length];

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void onClick(View v) {
        showDialog(0);
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case 0:
            return new AlertDialog.Builder(this)
                    .setIcon(R.drawable.ic_launcher)
                    .setTitle("This is a dialog with some simple text...")
                    .setPositiveButton("OK",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int whichButton) {
                                    Toast.makeText(getBaseContext(),
                                            "OK clicked!", Toast.LENGTH_SHORT)
                                            .show();
                                }
                            })
                    .setNegativeButton("Cancel",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int whichButton) {
                                    Toast.makeText(getBaseContext(),
                                            "Cancel clicked!",
                                            Toast.LENGTH_SHORT).show();
                                }
                            })
                    .setMultiChoiceItems(items, itemsChecked,
                            new DialogInterface.OnMultiChoiceClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int which, boolean isChecked) {
                                    Toast.makeText(
                                            getBaseContext(),
                                            items[which]
                                                    + (isChecked ? " checked!"
                                                            : " unchecked!"),
                                            Toast.LENGTH_SHORT).show();

                                }
                            }).create();
        }
        return null;
    }
}

4、调试。

点击按钮弹出对话框,在CheckBox上面打勾,就会弹出一个Toast提示,显示选中物件的文本信息。点击“OK”或“Cancel”按钮会使对话框消失。





  





想要显示对话框,首先要重写Activity基类中的onCreateDialog()方法:

@Override  
protected Dialog onCreateDialog(int id) {
    // ...
}
当调用showDialog()的时候,上面被重写的方法就被调用了:public void onClick(View v) {
    showDialog(0);
}
这个创建对话框的onCreateDialog()方法是一个被Activity控制的回调函数,当调用showDialog()时,onCreateDialog()回调函数就被触发了。showDialog()方法接受一个Integer参数,用来识别到底要显示哪个对话框。一般情况下,使用switch语句去判断显示不同的对话框。
想要创建一个对话框,还需要使用AlertDialog类的Builder构造器,设置不同的属性,比如图标、标题、按钮、单选框等等:

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case 0:
            Builder builder = new AlertDialog.Builder(this);
            builder.setIcon(R.drawable.ic_launcher);
            builder.setTitle("This is a dialog with some simple text...");
            builder.setPositiveButton("OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int whichButton) {
                            Toast.makeText(getBaseContext(), "OK clicked!",
                                    Toast.LENGTH_SHORT).show();
                        }
                    });

            builder.setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int whichButton) {
                            Toast.makeText(getBaseContext(), "Cancel clicked!",
                                    Toast.LENGTH_SHORT).show();
                        }
                    });

            builder.setMultiChoiceItems(items, itemsChecked,
                    new DialogInterface.OnMultiChoiceClickListener() {
                        public void onClick(DialogInterface dialog, int which,
                                boolean isChecked) {
                            Toast.makeText(
                                    getBaseContext(),
                                    items[which]
                                            + (isChecked ? " checked!"
                                                    : " unchecked!"),
                                    Toast.LENGTH_SHORT).show();
                        }
                    });
            return builder.create();
        }
        return null;
    }




摘自 manoel的专栏

喜欢0 评分0
游客

返回顶部