首页 > 代码库 > 第二章 吸引你的眼球—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)