Android: 使用 WindowManager 时背景透明

Android: Transparend background when using WindowManager

三星 Galaxy S6 Edge,Android 6.0.1(如果重要)

我只在当前 Activity 中激活了一个浮动按钮。这是通过 XML 资源文件完成的,您可以在其中以不同方式将背景设置为透明。这工作正常。

现在我想制作此按钮 "global",它位于当前 运行 的所有 window/activity 之上。为此,我使用 WindowManager 并授予 ACTION_MANAGE_OVERLAY_PERMISSION。这也可以正常工作,但按钮属性由 Windowmanager 管理,而不是由 XML 文件管理。 结果是按钮图像的背景不透明。查看图片,左边是 XML,右边是 WindowManager。

我怎样才能:

a) 将 XML 文件与 WindowsManager 一起使用,以便按钮图像获得透明背景?

b) 通过 WindowsManager 向按钮图像添加一些 属性 以使图像获得透明背景?

@Override
public void onCreate()
{
    super.onCreate();

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
    m_btnRecord = new ImageButton(this);
    m_btnRecord.setImageResource(R.drawable.ic_recordbutton);
    m_btnRecord.setOnTouchListener(m_recordTouchListener);
    params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_PHONE,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        PixelFormat.TRANSLUCENT);
    params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL;
    params.x = 0;
    params.y = 0;
    windowManager.addView(m_btnRecord, params);
}

有两种方法

1.using xml

LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
            WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.RIGHT | Gravity.TOP;
    addview = li.inflate(R.layout.traslucent, null);

    wm.addView(myview, params);
  1. 在 Imageview 中设置 Alpha 选项

m_btnRecord.setAlpha(0);