標籤:
一、目標
自訂顯示的多士,包括內容文字格式設定、顯示視窗格式。
二、代碼實現
1、在“顯示號碼歸屬地”服務類(ShowPhoneAddService)中自訂多士方法(取名myToast(String sting)),參數string為需要顯示的字串(註:本例中只需要使用自訂的多士來顯示號碼歸屬地,其他地方不使用,因此在類中建立方法)。在自訂方法中(myToast):
(1)通過new TextView(Context context)方法定義一個TextView對象(取名view),參數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
Android執行個體-手機安全衛士(三十九)-自訂多士(文字格式設定、顯示視窗)