首页 > 代码库 > 第二章 吸引你的眼球—UI编程(7)

第二章 吸引你的眼球—UI编程(7)

2.3 简单明了的消息提示框(Toast)和对话框(Dialog)

2.3.1Toast提示

很多时候,我们需要对用户提供一些提示信息。比如,当用户登入应用程序时,提示用户“应用程序需要更新”;当用户在输入框输入文本时,提示用户“最多能输入30个字符”。这些需求,Toast轻松就能搞定!

Toast是Android提供的“快显讯息”类。Toast使用起来非常简单,只需要简单的代码就能实现。

Toast.makeText(Context context, CharSequence text,int duration).show();

 

这里有三个参数,第一个为当前的Context;第二个为要显示的提示信息;第三个则为提示信息显示的时间周期,Toast中有两个静态常量LENGTH_LONG和LENGTH_SHORT。当然如果你已经把提示信息存入了资源文件中,则也可以用以下的代码来实现。

Toast.makeText(Context context,int resId,int duration).show();

 

其他参数不变,只是第二个参数改成了资源ID。

我们在一个叫ToastActivity的Activity中写一个简单的Toast提示来看看它的效果吧。

Toast.makeText(ToastActivity.this,

 "使用Toast提示", Toast.LENGTH_LONG).show();

 

效果如图2-20所示:

技术分享

图2-20 Toast的使用

2.3.2Dialog提示

Toast的使用无疑是很方便的,但是有些时候,Toast并不能满足我们的需求。因为可能我们并不仅仅满足于给用户提示一些信息,而是希望给用户提示一些信息之后,用户可以有更多自己的选择。比如,当用户点击“退出”按钮的时候,我们给用户提示“是否真的选择退出”,因为有可能“退出”按钮是用户不小心点击到的,当用户再点击“确定”时,则真的退出应用;如果用户点击“取消”则返回应用。这样的话,Toast就不能满足于这样的需求了,于是我们的Dialog对话框就呼之欲出了。

在Android中,我们要实现对话框可以使用AlertDialog.Builder类,也可以自定义对话框,下面我们分别通过一个例子来对它们加以说明。

 

1)使用AlertDialog.Builder类创建对话框

在使用这种方式创建对话框之前,我们先来了解一下AlertDialog.Builder中几个常用的方法。

setTitile(); // 给对话框设置title

setIcon(); // 给对话框设置图标

setMessage(); // 给对话框设置提示信息

setPositiveButton(); // 给对话框添加“YES”按钮

setNeutralButton(); // 给对话框添加“NO”按钮

 

下面,我们就来创建一个对话框,弹出一个标题为“提示信息”,信息内容为“确定退出吗”,并有一个“确定”按钮和一个“取消”按钮,并为“确定”按钮添加事件监听,代码如下:

new AlertDialog.Builder(this).setTitle("提示信息").

        setMessage("确定退出吗").

        setPositiveButton("确定", new DialogInterface.OnClickListener() {

             @Override

             public void onClick(DialogInterface dialog, int which) {

                 finish();

             }

        }).

        setNegativeButton("取消", null).

        show();

 

下面,我们来看看效果,如图2-21所示:

技术分享

图2-21AlertDialog的使用

 

虽然我们没有对“取消”按钮添加事件监听,但在这个对话框中,当我们点击“取消”按钮时,对话框一样会被关闭,这是因为setNegativeButton()默认就会关闭对话框。

2)自定义对话框

很多时候,我们根据需求需要自己来设计对话框。下面,我们也以一个例子来看看自定义对话框是如何实现的。

首先,我们新建一个布局文件dialog.xml,并在其中定义好对话框:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content">

    <ImageView

            android:id="@+id/bg_pic"

            android:layout_width="260dp"

            android:layout_height="150dp"

            android:layout_centerHorizontal="true"

            android:background="@drawable/dialog_bg"/>

    <ImageView

            android:id="@+id/close_view"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_alignRight="@id/bg_pic"

            android:background="@drawable/close"/>

    <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="自定义Dialog"

            android:textColor="@android:color/black"

            android:layout_centerInParent="true"/>

</RelativeLayout>

 

在这个对话框中,我们定义了一个Button,一个TextView。接下来,我们定义一个MyDialog继承自Dialog。

// import略

public class MyDialog extends Dialog{

 

    private LayoutInflater factory;

 

    public MyDialog(Activity act) {

        super(act);

        factory = LayoutInflater.from(act);

    }

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(factory.inflate(R.layout.dialog, null));

    }

}

 

然后,我们在一个Activity的onCreate方法中来看看效果吧:

new MyDialog(this).show();

 

效果如图2-22所示:

技术分享

图2-22 自定义Dialog的使用

 

好像并没有达到我们想要的效果,上面多出来了一块,而且外面也有边框,这些都不是我们想要的。这是因为这些都是Dialog默认的格式,如果我们不需要的话,我们需要为它添加我们自己的样式,我们在values目录下新建一个styles.xml样式文件,输入内容如下:

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <style name="mydialog" parent="@android:style/Theme.Dialog">

        <item name="android:windowNoTitle">true</item>

        <item name="android:windowBackground">@android:color/transparent</item>

    </style>

</resources>

 

在这个样式当中,第一个属性我们把Dialog设置为无title;第二个属性就是把边框设为透明,然后修改MyDialog的构造方法如下所示:

public MyDialog(Activity act) {

    super(act,R.style.mydialog);

    factory = LayoutInflater.from(act);

}

 

下面,我们再来看看效果,如图2-23所示:

技术分享

图2-23 自定义Dialog中使用样式

 

同样的,我们也可以在MyDialog中监听Diglog中组件的各种事件进行相应的处理,例如,当点击“X”图标时关闭该Dialog:

ImageView closeView = (ImageView) findViewById(R.id.close_view);

closeView.setOnClickListener(new View.OnClickListener() {

   

    @Override

    public void onClick(View v) {

        MyDialog.this.dismiss();

    }

});

第二章 吸引你的眼球—UI编程(7)