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);
- 在 Imageview 中设置 Alpha 选项
m_btnRecord.setAlpha(0);
三星 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);
- 在 Imageview 中设置 Alpha 选项
m_btnRecord.setAlpha(0);