简要说明  

  Toast是一种没有交点,显示时间有限,不能与用户进行交互,用于显示提示信息的显示机制,我们可以把它叫做提示框。Toast不依赖 于Activity,也就是说,没有Activity,依然可以使用Toast。
   Android的四大组件:Activity, Service, Broadcast Receiver, Contet
Provider,都是继承Context的(Context,现在大家称之为上下文,之前又被翻译为句柄),包括整个Application也是继承于Context的。Toast就是依赖于应用程序Application的Context。

项目结构

aaarticlea/png;base64,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" alt="" />

代码实现

  • MainActivity.java:
package com.example.linux.customtoasttest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast; /**
* writer: 胡红翔
* function: 自定义toast,以及toast的简单使用
*/
public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} // toast:位置的改变
public void toast1(View view) {
Toast toast = Toast.makeText(MainActivity.this, "toast", Toast.LENGTH_LONG);
toast.setGravity(Gravity.BOTTOM | Gravity.LEFT, 0, 0);
toast.show();
} //toast:自定义Toast
public void customToast(View view) {
LayoutInflater inflater = getLayoutInflater();
ViewGroup viewGroup = (ViewGroup) findViewById(R.id.toast_layout_root);
View layout = inflater.inflate(R.layout.toast_layout, viewGroup); TextView text = (TextView) layout.findViewById(R.id.textView);
text.setText("This is a custom toast"); Toast toast = new Toast(MainActivity.this);
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout); // 自定义View
toast.show();
}
}
  • activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.linux.customtoasttest.MainActivity"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" /> <Button
android:text="ToastPosition"
android:onClick="toast1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> <Button
android:text="CustomToast"
android:onClick="customToast"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
  • toast_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toast_layout_root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#DAAA"
android:orientation="horizontal"
android:padding="8dp"> <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
android:src="@mipmap/ic_launcher" /> <TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF" />
</LinearLayout>

实现原理

  • toast的makeText方法:得到一些信息,生成一个View
Toast result = new Toast(context);
LayoutInflater inflate = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);
TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message);
tv.setText(text); result.mNextView = v;
result.mDuration = duration; return result;
  • toast的show方法:这个比较难,表示没怎么看懂,后续再做补充。大概的是add(view)让上述view显示,开启了一个线程不断轮询(估计是duration),启动了一个通知服务。
// 窗口管理类
mWM = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
......
mWM.addView(mView, mParams);
// 绑定事件
trySendAccessibilityEvent();

友情链接

最新文章

  1. TCP/IP, WebSocket 和 MQTT
  2. websocket 实现聊天功能
  3. VS2013 密钥 – 所有版本(Visual Studio Ultimate,Premium,Professional,TFS)
  4. PHP程序员 新人求职 平台
  5. 解决Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid
  6. 使用Unity3D的50个技巧:Unity3D最佳实践
  7. pandas
  8. iOS动画实现总结
  9. JavaScript元素的创建、添加、删除
  10. Python基础 1----Python语言基础和Python环境准备与安装
  11. asp.net mvc4 webapi Post 参数 字符串
  12. Acdream a + b
  13. JDBC Connection Reset问题分析
  14. 关于caffe-windows中 compute_image_mean.exe出现的问题
  15. 经验36--C#无名(大事,物...)
  16. Linux 系统管理06--磁盘管理
  17. 数据访问安全--数据库遮罩及断词 Data Masking &amp; Tokenization
  18. 特征选择:Filter/Wrapper/Embedded
  19. mvc 文件压缩 减少文件大小
  20. java是如何编码解码的

热门文章

  1. test20190926 孙耀峰
  2. git提交项目到已有库
  3. JavaScript——判断页面是否加载完成
  4. [Go] Slices vs Array
  5. 多条件查询----补发周一内容(六级让我忽略了JAVA)
  6. java大附件上传,支持断点续传
  7. javascript 终极循环方法for... of ..推荐
  8. 查全率(Recall),查准率(Precision),灵敏性(Sensitivity),特异性(Specificity),F1,PR曲线,ROC,AUC的应用场景
  9. 【JZOJ6223】【20190617】互膜
  10. 和jz姐姐的vp记录