Toast显示消息提示框:
Toast是一种很方便的消息提示框,会在屏幕中显示一个消息提示框,没任何按钮,也不会获得焦点
一段时间过后自动消失
创建Toast的对象有两种方法,
一种直接调用Toast类的makeText()方法创建,
一种是通过构造方式进行创建
下面依次演示下两种创建Toast对象的方法:
实例:消息提示框Toast的使用
代码:
MainActivity:
- <span style="font-family:Comic Sans MS;">public class MainActivity extends Activity {
- private Button btnToast;
- private Button btnImgToast;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- btnToast = (Button) findViewById(R.id.btntoast);
- btnImgToast = (Button) findViewById(R.id.btnimgtoast);
- //1.使用Toast类的makeText()方法直接生成Toast信息
- btnToast.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(MainActivity.this, "用Toast类makeText()弄的普通的Toast提示", Toast.LENGTH_LONG).show();
- }
- });
- //2.定义一个Toast对象,通过构造方法构建
- btnImgToast.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast toast = new Toast(MainActivity.this);
- //设置持续时间
- toast.setDuration(Toast.LENGTH_LONG);
- //设置toast的位置,参数依次为对齐方式,x,y的偏移值
- toast.setGravity(Gravity.CENTER, 0, 0);
- //设置一个线性布局,图片和一个TextView
- LinearLayout line = new LinearLayout(MainActivity.this);
- ImageView img = new ImageView(getApplicationContext());
- img.setImageResource(R.drawable.chaomeng);
- //设置imageview的内边距,参数依次为左上右下,这里的话可以理解为添加空白5px
- img.setPadding(0, 0, 5, 0);
- line.addView(img);
- TextView text = new TextView(getApplicationContext());
- text.setText("我是构造方法创建的有图片的Toast!");
- line.addView(text);
- toast.setView(line);
- toast.show();
- }
- });
- }
- }</span>
运行截图:
代码解释:
setDuration(int time):设置Toast的持续时间,通常用Toast.LENGTH_LONG/SHORT,当然也可以直接用普通数字,=10这样
setGravity(int gravity,int x,int y):设置提示框的位置,参数依次为对齐位置,相对于x,y的偏移值
setPadding(int 左,int 上,int 右,int 下):设置内边距,前后左右的空格,可以这样理解
setView:设置提示框显示的视图
Notification:在状态栏中显示通知:
在我们平时使用android手机时,当收到短信的时候,手机的顶部会出现一个提示信息,
Notification是一种全局效果的通知,通过NotificationManager服务来发送Notification
如图:
就是这种小提示,这里顺道给大家介绍如何给avd虚拟机打电话和发短信:
1.点击ddms:2.选择:Emulator Control,没有的话window->show view->other找到
3.打电话或者发短信,以后用到的定位技术,自己输入参数
很简单,读者可以自己操作下!!
好的,说回我们的Notification
使用notifycation与NotificationManager类发送显示通知的流程:
实例代码:
模仿qq信息提示:
main.xml
- <span style="font-family:Comic Sans MS;"><Button
- android:id="@+id/btnshow"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="显示通知" />
- <Button
- android:id="@+id/btndelete"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="删除通知" /></span>
MainActivity.java
这里的话我们定义了两个通知,一个是普通的提示,一个是关联了一个Activity的
因为第二个需要激活一个Activity,所以要新建一个Activity,并且在AndroidManifest.xml文件中进行声明
注意区分好:
代码:
- <span style="font-family:Comic Sans MS;">public class MainActivity extends Activity {
- private Button btnshow;
- private Button btndelete;
- //定义两个Notification的ID号,等下关闭标签的时候用到
- private static final int NOTIFYID_1 = 1;
- private static final int NOTIFYID_2 = 2;
- private Notification notify1;
- private NotificationManager notificationManager;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- //1.调用getSystemService获取通知管理器,用于发送通知
- notificationManager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
- btnshow = (Button) findViewById(R.id.btnshow);
- btndelete = (Button) findViewById(R.id.btndelete);
- btnshow.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- //2.创建一个Notification对象
- notify1 = new Notification();
- //3.设置图片,通知标题,发送时间,提示方式等属性
- notify1.icon = R.drawable.bikaqiu;
- notify1.tickerText = "你的QQ好友比卡丘给你发来了消息";
- notify1.when = System.currentTimeMillis(); //获取当前系统的时间
- notify1.defaults = Notification.DEFAULT_ALL; //设置默认声音,默认震动与默认闪光灯
- //设置过一段时间后显示的内容
- notify1.setLatestEventInfo(getApplicationContext(), "比卡丘", "好久没见了,在忙什么呢?", null);
- //4.通过notificationManager类发送通知
- notificationManager.notify(NOTIFYID_1,notify1);
- //添加第二个通知
- Notification notify2 = new Notification();
- notify2.icon = R.drawable.xiaozhi;
- //设置打开程序后图标消失
- notify2.flags|=Notification.FLAG_AUTO_CANCEL;
- Intent it = new Intent(getApplicationContext(),OtherActivity.class);
- //可看做是对Intent的封装,用于处理即将发生的事情,通知Notification界面的跳转,但不是马上
- //暂时理解为延迟的Intent吧
- PendingIntent pit = PendingIntent.getActivity(getApplicationContext(), 0, it, 0);
- notify2.setLatestEventInfo(getApplicationContext(), "好消息", "最新版宠物小精灵出啦!!!", pit);
- notificationManager.notify(NOTIFYID_2,notify2);
- }
- });
- btndelete.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- //直接调用NotificationManager.cancel(ID号),关闭对应id好的notification
- //notificationManager.cancel(NOTIFYID_1);
- //当然你也可以全部关闭掉
- notificationManager.cancelAll();
- }
- });
- }
- }</span>
运行截图:
3.点击好消息:4.点击删除提示:
代码解释:
1.注意,因为我们用到了闪光灯与振动器,所以需要在AndroidManifest.xml文件中进行权限的添加:
- <span style="font-family:Comic Sans MS;"><uses-permission android:name="android.permission.FLASHLIGHT" />
- <uses-permission android:name="android.permission.VIBRATE" /></span>
依次分别为:Notification.DEFAULT_SOUND/VIBRATE/LIGHTS/ALL
!!!!3.这里还要注意一点,在2.3包括2.3以下的版本,使用这个程序会报莫名其妙的错误,笔者今晚在这里纠结了2个小时,
代码检查过N遍,语法也没问题,但他就是报错,最后换了4.2的就跑起来了,所以建议大家使用3.0或以上的 avd吧
4.代码的注释都很详细,应该都能看懂,这里就不个个方法纠结了...
Notification.Builder类的使用
二.有部分读者想要自定义信息的提示音啊,还有震动的幅度什么,加上3.0以上提供了一个新的Notification.Builder类,
创建Notification显得更加轻松,这里的话我们就演示下,使用Builder类创建Notification,并且自定义一些音效,震动频率吧
实例:使用Builder创建带有自定义提示音与震动的Notification:
注意Builder的方法都是set***什么的哦!
这里的话要注意一点,因为Builder是3.0之后才推出的,但是某些属性要4.0才可以用,不然也会报错
所以先把AndroidManifest.xml的minsdk改为:14,即4.0进行代码的编写,待可运行后再改回即可