懸浮窗實現(xiàn)傳統(tǒng)方案
對于傳統(tǒng)懸浮窗和一些古老的“黑科技”懸浮窗的實現(xiàn)软吐,想必已經(jīng)有很多成熟的案例了瘩将,實現(xiàn)策略基本為以下兩種:
- TYPE_SYSTEM_ALERT類型
mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams()
layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
? 需要權(quán)限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" ></uses>
- TYPE_TOAST / TYPE_PHONE 類型
? 7.1.1以下不需要權(quán)限聲明,在魅族、華為姿现、小米等機(jī)型上默認(rèn)隱藏肠仪,需要引導(dǎo)用戶打開懸浮窗。
傳統(tǒng)方案的問題
第一種方案因為存在各種限制建钥,不能被眾多開發(fā)采納藤韵,故而比較流行的懸浮窗實現(xiàn)方式是第二種。
但是熊经,我們有自己的原則:
- 不能接受7.1.1以上機(jī)型泽艘,使用第二種方式實現(xiàn)懸浮窗仍需要用戶主動授予權(quán)限的操作?
- 不能接受在魅族镐依、華為匹涮、小米等機(jī)型上默認(rèn)隱藏,需要引導(dǎo)用戶打開懸浮窗槐壳,就像這樣
[站外圖片上傳中...(image-18b632-1541251502358)]
功能
- 應(yīng)用內(nèi)顯示然低,無需申請任何權(quán)限
- 應(yīng)用內(nèi)顯示,所有機(jī)型都可以默認(rèn)顯示懸浮窗务唐,無需引導(dǎo)用戶做更多設(shè)置
- 支持拖拽
- 超出屏幕限制移動
- 可自動吸附到屏幕邊緣
使用規(guī)則
-
在基類Activity(注意必須是基類Activity)中的onStart和onStop添加如下代碼
@Override protected void onStart() { super.onStart(); FloatingViewManager.getInstance().attach(this); } @Override protected void onStop() { super.onStop(); FloatingViewManager.getInstance().detach(this); }
-
展示懸浮窗
FloatingViewManager.getInstance().add(getApplicationContext());
-
銷毀懸浮窗
FloatingViewManager.getInstance().remove();
附上Github鏈接:
https://github.com/leotyndale/EnFloatingView