第二章吸引你的眼球—UI编程(7)
发表时间:2020-10-19
发布人:葵宇科技
浏览次数:48
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所示:
[img]http://img.blog.csdn.net/20150104092750465?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYXJ1aTMxOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
图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所示:
[img]http://img.blog.csdn.net/20150104092808436?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYXJ1aTMxOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
图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所示:
[img]http://img.blog.csdn.net/20150104092840046?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYXJ1aTMxOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
图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所示:
[img]http://img.blog.csdn.net/20150104092839808?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYXJ1aTMxOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
图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();
}
});