【Android(安卓)开发】:通知之Notifications Toast
16lz
2021-12-04
这一讲我们来学习一下 Android中的通知[Notifications],这里我们学习 Notifications 的内容主要是以Android 低版本的介绍文档来学习,当然在最新版本中Android已经将Notifications中的Toast分离出来作为单独的模块讲解,这一讲我们就先来学习一下Android中Toast的用法,下一讲中我们讲会学习Android中Notifications的Status Bar Notification 用法[重点]
如果你创建了一个 Toast Notification 是来自Service的,它就会显示在当前获得焦点的 Activity的前面。如果用户想用对通知做出相应,应该考虑使用 Status Bar Notification。
1. Android中的 Notifications
查看Android官方文档,通知的说明 在您的应用程序,可能会发生多种类型的情况下,这就需要你对这些事件发生对用户进行通知。有些时间需要与用户进行交互,得到用户的响应,而有些时间则不需要。比如说: 1). 文件保存成功,就需要出现一条信息来确认文件已经成功保存。 2). 如果应用程序在后台运行而且需要引起用户的注意,应用程序就应该创建一条通知让用户能够方便的做出相应。 3). 如果应用程序正在工作,此时需要用户等待(比如加载一个文件),应用程序应该显示 悬浮的 progress 或者 bar 组件之类的。可以知道Android中的通知的方式有三种:
1). Toast Notification 来自后台的简短的通知 2). Status Bar Notification 来自后台的比较持久的提醒而且需要得到用户的响应。 3). Dialog Notification 与Activity相关的对话框的通知 [这种形式建议参考之前所讲的 Android中UI之对话框的操作]
2. Toast Notification
这种通知是显示在窗体的最上层,它只显示在当前Activity的有限空间内,不影响当前Activity可见与可交互。 这种通知会自动的弹出和自动消失,不会接受交互事件,仅仅是一种提示作用。因为它的创建是来自后台的 Activity 或者 Service. 即使是应用程序不可见它也会发生。如果你创建了一个 Toast Notification 是来自Service的,它就会显示在当前获得焦点的 Activity的前面。如果用户想用对通知做出相应,应该考虑使用 Status Bar Notification。
1). 使用步骤首先,通过makeText()方法来实例化一个 Toast 对象。方法说明如下
使用方法如下程序所示:public static Toast makeText (Context context, int resId, int duration) 这个方法需要三个参数:context: 上下文对象 resId: 信息内容[以R.string 方式来显示最好] duration: 显示时间它返回一个Toast对象,通过调用show()方法来显示通知。
2). 显示你通知的位置以上这种方法是大多数 Toast Notification 的使用方式,当然你也可以自己定制化你的通知。Context context = getApplicationContext();CharSequence text = "Hello toast!";int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration);toast.show();
标准的通知一般是显示在屏幕的正下方,当然你可以通过调用 setGravity(int, int, int) 方法来调整通知显示的位置,它接受三个参数。public void setGravity (int gravity, int xOffset, int yOffset)gravity : Gravity 常量 xOffset : x轴偏移量 yOffset : y轴偏移量例如:显示通知位置在左上角,你可以设置如下 : toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0); 你也可以通过设置后面两个参数的偏移量来调整通知在左上角的偏移位置 3). 自定义通知
创建一个自定义的布局,可以在XML中定义,也可以在代码中定义,然后调用 setView(View) 方法将 view 对象加载进来即可。
这边用LayoutInflate的 inflate() 来动态加载布局,这种方式 在前面的 【Android 开发】之 UI组件那些文章已经讲的很清楚了,这里不做概述,不懂的学友可以去翻翻之前写的博客就明白了。
3. 代码实现
1) 布局文件 activity_main.xml 这里就不贴出来了,只是定义了两个按钮
2) toast_layout.xml 自定义布局文件
3) 程序主代码
package com.android.toastdemo;import android.os.Bundle;import android.app.Activity;import android.view.Gravity;import android.view.LayoutInflater;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity { private Button button; private Button button2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initComponent(); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast toast = Toast.makeText(MainActivity.this, "Hello AHuier", Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); // Toast 居中显示 toast.show(); } }); button2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { /* * 动态加载布局第一种写法 View view = LayoutInflater.from(MainActivity.this) .inflate(R.layout.toast_layout, null);*/ //动态加载布局 LayoutInflater inflate = getLayoutInflater(); View layout = inflate.inflate(R.layout.toast_layout, (ViewGroup) findViewById(R.id.toast_layout_root)); TextView textView = (TextView) layout.findViewById(R.id.text); textView.setText("This is a custom toast"); Toast toast = new Toast(MainActivity.this); toast.setGravity(Gravity.CENTER, 0, 0); toast.setDuration(Toast.LENGTH_LONG); //toast.setView(view); //加载布局第一种写法 toast.setView(layout); //加载布局 toast.show(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } private void initComponent() { button = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); }}
4. 程序执行结果
一般在做开发过程中,为了统一UI风格,往往定义自定义通知,或者自定义的对话框的这种风格会重复出现,为了避免代码冗余,可以声明在一个类中,可以反复使用。
详情参考 :Android官方文档 Toast 模块介绍
更多相关文章
- Android动画效果生动有趣的通知NiftyNotification(Android(安卓)T
- Android动画效果生动有趣的通知NiftyNotification(Android(安卓)T
- [Android] TextView只显示一行,多余显示省略号...
- View 控件EditText属性
- android - TextView单行显示...或者文字左右滚动(走马灯效果)
- Android窗口机制(五)最终章:WindowManager.LayoutParams和Token以及
- ImageView 常用属性的分析
- Android的ps命令介绍和技巧
- Android(安卓)- 约束布局实现一个简单的登陆界面