Window添加悬浮窗解析

Window添加悬浮窗解析
  • WindowManager获取
    window作为一种视图抽象承载者,唯一的实现类是PhoneWindow,PhoneWindow中包含一个视图结构DecorView(FrameLayout 包含Title布局) 该View便是我们会addView时的视图根布局 包含结构如下图:
    PhoneWindow 结构
    添加Window时代码如下:
    WindowManager windowManager = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
    WindowManager windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); 

上图中第一种获取的WindowManager是当前Activity窗口管理类WindowManagerImp,这个窗口管理实现类会有多个每个Activirty都会包含一个该实例,Activity销毁 该窗口管理器包含的视图也将销毁 。第二种是通过获取全局应用级别的WindowManagerImpl实现类 ,该窗口管理器包含的窗口个和Application的生命一样长
下面是Activty获取WindowManager的实现:

Activity.class
   @Override
    public Object getSystemService(@ServiceName @NonNull String name) {
        if (getBaseContext() == null) {
            throw new IllegalStateException(
                    "System services not available to Activities before onCreate()");
        }

        if (WINDOW_SERVICE.equals(name)) {  
            return mWindowManager; // 返回当前Acticvty的成员变量mWindowManager
        } else if (SEARCH_SERVICE.equals(name)) {
            ensureSearchManager
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 IntelliJ IDEA 中,可以通过创建 ToolWindow 来向应用程序添加小窗口。ToolWindow 是一个浮动窗口,可以显示用于特定任务的工具窗格。可以使用 IntelliJ IDEA 的插件 API 来创建 ToolWindow添加小窗口。 下面是通过插件 API 在 ToolWindow添加小窗口的步骤: 1. 创建一个插件项目并添加插件依赖项。 2. 创建一个类来表示 ToolWindow。 ```java public class MyToolWindowFactory implements ToolWindowFactory { // 实现 ToolWindowFactory 接口 // ... } ``` 3. 在 `createToolWindowContent()` 方法中创建一个 JPanel 来表示 ToolWindow 内容。 ```java public class MyToolWindowFactory implements ToolWindowFactory { public void createToolWindowContent(Project project, ToolWindow toolWindow) { // 创建 JPanel JPanel panel = new JPanel(new BorderLayout()); // 在 JPanel 中添加其他组件 JLabel label = new JLabel("This is my tool window"); panel.add(label, BorderLayout.CENTER); // 将 JPanel 添加到 ToolWindow 中 ContentFactory contentFactory = ContentFactory.SERVICE.getInstance(); Content content = contentFactory.createContent(panel, "", false); toolWindow.getContentManager().addContent(content); } // 实现 ToolWindowFactory 接口的其他方法 // ... } ``` 在 `createToolWindowContent()` 方法中,创建一个 JPanel 并添加其他组件。然后,使用 `ContentFactory` 类创建一个新的 Content 对象,并将 JPanel 添加到该对象中。最后,将 Content 添加到 ToolWindow 的 ContentManager 中。 4. 将 ToolWindow 注册到插件中。 ```java public class MyPlugin implements DumbAware, ApplicationComponent { public void initComponent() { // 注册 ToolWindow ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(project); toolWindowManager.registerToolWindow("MyToolWindow", false, ToolWindowAnchor.BOTTOM); } // 实现 ApplicationComponent 接口的其他方法 // ... } ``` 在 `initComponent()` 方法中,使用 `ToolWindowManager` 类将 ToolWindow 注册到 IntelliJ IDEA 中。可以使用 `registerToolWindow()` 方法指定 ToolWindow 的名称、是否可关闭和锚点位置。 这样,就可以在 IntelliJ IDEA 中创建一个 ToolWindow 并向其中添加小窗口了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值