引用:
用過新版本android 360手機助手都人都對 360中只在桌面顯示乙個小小懸浮視窗羨慕不已吧?
其實實現這種功能,主要有兩步:
1.判斷當前顯示的是為桌面。這個內容我在前面的帖子裡面已經有過介紹,如果還沒看過的趕快穩步看一下哦。
2.使用windowmanager往最頂層新增乙個view
a.如果獲取到狀態列的高度
b.懸浮視窗的拖動
c.懸浮視窗的點選事件
有開始之前,我們先來看一下效果圖:
接下來我們來看看floatview的**:
複製**
**如下:
**解釋:
int statusbarheight = frame.top;
為獲取狀態列的高度,為什麼在event.getrawy()的時候減去狀態列的高度呢?
因為我們的懸浮視窗不可能顯示到狀態列中去,而後getrawy為獲取到螢幕原點的距離。當我們螢幕處於全屏模式時,獲取到的狀態列高度會變成0
(x - mstartx) < 5 && (y - mstarty) < 5
如果我們在觸控過程中,移動距離少於5 ,則視為點選,觸發點選的**。
複製**
**如下:
**解釋:
的時候會在異常發現。
最後我們再來看看activity中的實現。
複製**
**如下:
**解釋:
在activity中我們主要是新增懸浮窗,並且設定他的位置。另外需要注意flags的應用:
layoutparams.flag_not_touch_modal 不影響後面的事件
layoutparams.flag_not_focusable 不可聚焦
layoutparams.flag_not_touchable 不可觸控
最後我們在ondestroy()中移除到懸浮視窗。所以,我們測試的時候,記得按home鍵來切換到桌面。
最後千萬記得,在androidmanifest.xml中來申明我們需要用到的android.permission.system_alert_window許可權
androidmanifest.xml**如下:
複製**
**如下:
android全屏,隱藏狀態列
方法一public class mainactivity extends activity 方法二 方法三 true true 注 1 方法一中的兩段 要在setcontentview 之前。2 方法二只能同時隱藏狀態列和標題欄。3 方法一和方法二都只應用於單個activity。方法三應用於整個程式...
Dialog全屏,去掉狀態列
dialog即使設定全屏了,但還是有狀態列占用高度這 直接將下面這行 放到你的dialog中即可 override protected void onstart 順便說下自定義dialog寬高 windowmanager.layoutparams attributes getwindow getat...
介面全屏和隱藏狀態列和亮色狀態列
介面全屏 隱藏狀態列 和 亮色狀態列區別 介面全屏 把導航欄和虛擬按鍵都隱藏了。從狀態列下拉會半透明懸浮顯示一會兒狀態列和導航欄 隱藏狀態列 把狀態列給隱藏了 亮色狀態列 狀態列文字顯示白色 內容顯示到狀態列下 全屏 protected void fullscreen else if build.v...