Android实例-手机安全卫士(三十九)-自定义吐司(一)(文本格式、显示窗口)

一、目标

  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                 //移除自定义吐司方法中加载至窗口管理者里面的View
3                 if(view !=null)
4                     wm.removeView(view);
5                 break;
View Code

 

posted @ 2015-04-30 11:54  红烧大白鲨  阅读(430)  评论(0编辑  收藏  举报