美文网首页
Android 8 悬浮窗 简单使用

Android 8 悬浮窗 简单使用

作者: 梧叶已秋声 | 来源:发表于2019-12-22 09:59 被阅读0次

    首先,在AndroidManifest.xml加入权限。
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

    public class MainActivity extends AppCompatActivity{
        private WindowManager mWindowManager;
        private  WindowManager.LayoutParams layoutParams;
    
        private Button button1;
        private Button button2;
    
        private LinearLayout linearLayout;
     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //检查是否已经授予权限
            if (!Settings.canDrawOverlays(this)) {
                //若未授权则请求权限
                getOverlayPermission();
            }
    
            mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    
            linearLayout = new LinearLayout(getBaseContext());
            linearLayout.setOrientation(LinearLayout.VERTICAL);
    
            layoutParams = new WindowManager.LayoutParams();
            layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
            layoutParams.gravity = Gravity.BOTTOM;
            layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
            layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
    
    
            button1 = new Button(getBaseContext());
            button1.setText("test1");
            button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   mWindowManager.removeView(linearLayout);
                }
            });
            button2 = new Button(getBaseContext());
            button2.setText("test2");
            button2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mWindowManager.removeView(linearLayout);
                }
            });
            linearLayout.addView(button1);
            linearLayout.addView(button2);
    
            mWindowManager.addView(linearLayout,layoutParams);
        }
        //请求悬浮窗权限
        private void getOverlayPermission() {
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
            intent.setData(Uri.parse("package:" + getPackageName()));
            startActivityForResult(intent, 0);
        }
    
    }
    

    Android 8中layoutParams.type 只能设成WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,因为源码中做了限制否则会报错。

    相关文章

      网友评论

          本文标题:Android 8 悬浮窗 简单使用

          本文链接:https://www.haomeiwen.com/subject/qpdgnctx.html