Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android 懸浮窗

Android 懸浮窗

編輯:關於android開發

Android 懸浮窗


iPhone有個很好用的白色圓點,今天就來研究下Android中的懸浮框,這裡主要是實現一個快捷鍵的功能,當然也可以在懸浮框中做想做的事!

懸浮窗的實現主要是通過WindowManager實現,當然WindowManager只是一個接口,想了解源碼的同志們可以去看WindowManagerImpl,懸浮框主要是通過WindowManager中的addView,updateView,removeView實現
WindowManager.LayoutParams這個類用於提供懸浮窗所需的參數
WindowManager.LayoutParams參數說明:

type 用於確定懸浮窗的類型(window類型,window有三種類型,應用window,子window,系統window,其中懸浮窗中使用的是系統window),一般使用TYPE_PHONE,表示在所有應用程序之上,狀態欄之下,當然這裡還提供了很多類型,TYPE_STATUS_BAR(狀態欄)TYPE_SEARCH_BAR(搜索框)TYPE_SYSTEM_ALERT(系統提示框,例如電量很低時提示)等等,有很多,根據需求去選擇 flags 用於確定懸浮窗的行為,FLAG_NOT_FOCUSABLE(window不需要獲得焦點,也不需要接收各種輸入事件)FLAG_NOT_TOUCHABLE(不可點擊)FLAG_NOT_TOUCH_MODAL(系統會通過當前window區域以外的單擊事件傳遞給底層的window,當前window區域以內的單擊事件則自己處理)FLAG_SHOW_WHEN_LOCKED(顯示在鎖屏的界面上)等等 gravity 用於確定懸浮窗的對齊方式 x 用於確定懸浮窗的橫坐標 y 用於確定懸浮窗的縱坐標 width 值用於指定懸浮窗的寬度 height 值用於指定懸浮窗的高度

了解這些參數基本就能創建一個懸浮框了

private void createFloatView() {
        mWindowManager = (WindowManager) getApplication().getSystemService(getApplication().WINDOW_SERVICE);
        wmParams = new WindowManager.LayoutParams();
        wmParams.type = WindowManager.LayoutParams.TYPE_PHONE;
        wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
        wmParams.gravity = Gravity.LEFT | Gravity.TOP;
        wmParams.x = 100;
        wmParams.y = 100;

        wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
        wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;

        LayoutInflater inflater = LayoutInflater.from(getApplication());
        mFloatLayout = (LinearLayout) inflater.inflate(R.layout.layout_float_window, null);
        mWindowManager.addView(mFloatLayout, wmParams);
        mFloatView = (ImageView) mFloatLayout.findViewById(R.id.img_float_window);

        mFloatView.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                wmParams.x = (int) event.getRawX() - mFloatView.getMeasuredWidth() / 2;
                wmParams.y = (int) event.getRawY() - mFloatView.getMeasuredHeight() / 2 - 25;
                mWindowManager.updateViewLayout(mFloatLayout, wmParams);
                return false;
            }
        });

        mFloatView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(FloatWindowService.this, SearchActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                getApplication().startActivity(intent);
            }
        });
    }
if (mFloatLayout != null) {
            mWindowManager.removeView(mFloatLayout);
        }

以上就是懸浮框的過程,當然使用系統window必須要申請權限!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved