博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android实例-手机安全卫士(三十九)-自定义吐司(一)(文本格式、显示窗口)...
阅读量:4981 次
发布时间:2019-06-12

本文共 2937 字,大约阅读时间需要 9 分钟。

一、目标

  1、自定义显示的吐司,包括内容文本格式、显示窗口格式。

  2、当电话挂断、拒接等空闲状态时,自定义吐司消失。

二、代码实现

  1、在“显示号码归属地”服务类(ShowPhoneAddService)中自定义吐司方法(取名myToast(String sting)),参数string为需要显示的字符串(注:本例中只需要使用自定义的吐司来显示号码归属地,其他地方不使用,因此在类中创建方法)。在自定义吐司方法中(myToast):

    (1)在服务类中(ShowPhoneAddService)定义TextView对象的成员变量(取名view),再在自定义吐司方法(myToast)中通过new TextView(Context context)方法实例化,参数context为应用的上下文(getApplicationContext());

    (2)通过TextView(取名textView)的各种set方法传入并美化要显示的字符串(sting);

    (3)通过new WindowManager接口下的LayoutParams()对象实例化一个WindowManager.LayoutParams对象(取名params),该对象用于设置自定义的吐司的显示窗口参数;

    (4)通过WindowManager.LayoutParams对象(params)的“.属性 = 值”的方式设置其各项属性:

      ①窗口宽、高(width、height)均为包裹内容(WindowManager.LayoutParams.WRAP_CONTENT)

      ②窗口的flags属性设为不获取焦点(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)、不可触摸(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)、保持屏幕开启状态(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)等值(同一个属性的多个值可用且“|”连接)

      ③窗口样式(format)为半透明(PixelFormat.TRANSLUCENT);

      ④窗口类型(type)为吐司(WindowManager.LayoutParams.TYPE_TOAST);

    (5)在服务类中(ShowPhoneAddService)定义窗口管理者WindowManager对象(取名wm)的成员变量,并在创建(onCreate)方法中通过getSystemService(String name)方法实例化(参数name为窗口服务WINDOW_SERVICE),强转。再在自定义吐司方法(myToast)中通过窗口管理者WindowManager对象(wm)的addView(View view, LayoutParams params)方法加载文本视图(view)和显示窗口的各项参数(params)至窗口管理者中,用来显示。

自定义吐司方法代码:

1 public void myToast(String string){ 2         //设置吐司的显示文本内容和UI 3         TextView view = new TextView(getApplicationContext()); 4         view.setText(string); 5         view.setTextColor(Color.RED); 6         view.setTextSize(25); 7         //设置吐司的显示窗口参数 8         WindowManager.LayoutParams params = new WindowManager.LayoutParams();//创建窗口对象 9         params.height = WindowManager.LayoutParams.WRAP_CONTENT;//设置窗口高度为包裹内容10         params.width = WindowManager.LayoutParams.WRAP_CONTENT;//设置窗口宽度为包裹内容11         params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE//将窗口标记为不获取焦点12                 |WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE//将窗口标记为不可触摸13                 |WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;//将窗口标记为保持屏幕开启状态14         params.format = PixelFormat.TRANSLUCENT;//窗口样式为半透明15         params.type = WindowManager.LayoutParams.TYPE_TOAST;//窗口类型为吐司16         //通过文本和窗口加载至窗口管理器中17         wm.addView(view, params);18     }
View Code

   2、在服务类(ShowPhoneAddService)中的自定义的来电监听类(MyPhoneListener)中和去电服务类(OutCallReceiver)里,通过查询数据库获取号码归属地后,通过自定义的吐司方法将归属地传入便可显示。

传入代码;

1 myToast(inComingPhoneAdd);
View Code

  3、当通话结束或来电拒绝时吐司消失。

    (1)在自定义的电话状态监听器(MyPhoneListener)里,新增一个电话空闲状态(TelephonyManager.CALL_STATE_IDLE)的case,

    (2)在该case中通过if判断加载至自定义吐司方法中加载至窗口管理者里面的View是否为空,以防止空指针异常,若不为空则通过窗口管理者WindowManager对象(wm)的removeView(View view)方法移除该View。

空闲状态代码:

1 case TelephonyManager.CALL_STATE_IDLE://电话空闲状态:电话挂断、来电拒绝2                 //移除自定义吐司方法中加载至窗口管理者里面的View3                 if(view !=null)4                     wm.removeView(view);5                 break;
View Code

 

转载于:https://www.cnblogs.com/Red-Shark/p/4468507.html

你可能感兴趣的文章
angular 初学(二)ng-class ng-disabled
查看>>
android 检查网络连接状态实现步骤
查看>>
网上商城(OnlineMall)用户模块
查看>>
安装opencv 在ubuntu
查看>>
《信息安全技术》实验三 数字证书应用
查看>>
Leetcode: Search in Rotated Sorted Array
查看>>
对象如何实现排序
查看>>
高性能NIO框架Netty-对象传输
查看>>
织梦dedecms网站六大SEO优化技巧(转帖)
查看>>
XML的学习笔记
查看>>
使用AJAX实现用户名的唯一性校验(注册界面)-JAVA(新手)
查看>>
卷积神经网络
查看>>
c++类内存分布解析
查看>>
Linux SSH无密码登录
查看>>
phpstorm 报错及解决
查看>>
动态规划——背包问题
查看>>
mongodb 安全
查看>>
C# - JSON详解
查看>>
20145233 信息安全系统设计基础 第0周总结
查看>>
小结——居中问题的解决
查看>>