微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从当前用户选择的主题中获取颜色

如何解决从当前用户选择的主题中获取颜色

我开始用 Java 制作一个 IntelliJ 插件,想知道是否有办法以编程方式从 当前 IDE 主题,例如获取品红色终端前景色。

目前我只能实现浅色主题的浅色和深色主题的深色。

我的目标是从用户安装的配色方案中获得精确的颜色。例如,我使用插件商店中的 Atom One Dark 主题

我希望获取当前选定 ColorScheme 中的颜色,主题中的所有颜色都按以下格式存储到 .icls 文件中:

<option name="CONSOLE_ERROR_OUTPUT">
   <value>
      <option name="FOREGROUND" value="e06c75" />
   </value>
</option>

我想通过其 name 属性获取颜色。

感谢您的帮助,祝您有美好的一天。

解决方法

你可以检查 class: UIUtil 例如 UIUtil.getTreeTextBackground() 它应该返回 Color

,

非常感谢你们带领我走向正确的方向! 我找到了我正在寻找的东西。 你可以在这篇文章的底部获得我收集配色方案颜色的功能。

解决方案是:

ColorSchemes 文件或 .icls 文件如下所示:

<scheme name="ThemeName" version="142" parent_scheme="Darcula">
  <metaInfo>
  </metaInfo>
  <colors>
    <option name="ADDED_LINES_COLOR" value="98c379" />
  </colors>
  <attributes>
    <option name="ABSTRACT_CLASS_NAME_ATTRIBUTES">
      <value>
        <option name="FOREGROUND" value="e6c07b" />
      </value>
    </option>
  </attributes>
</scheme>

您可以通过编程方式获取这些颜色,在 Java 中(抱歉我不知道如何在 Kotlin 中实现),您可以通过执行以下操作获取当前的配色方案:

EditorColorsScheme colorsScheme = EditorColorsManager.getInstance().getSchemeForCurrentUITheme();

或者您可以通过执行以下操作获得默认配色方案:

EditorColorsScheme colorsScheme = = EditorColorsManager.getInstance().getScheme(EditorColorsManager.getInstance().getAllSchemes()[0].getName());

从中我制作了一个简单的函数,可以通过名称(属性和颜色)获取特定颜色。如果给定的名称与 中定义的颜色不对应,它将在 部分中查找。如果您特别想要一个属性的背景颜色,您也可以精确。

这是功能:

public Color fetchIJColor(String name,boolean isBackground){
    Color c = colorsScheme.getAttributes(TextAttributesKey.createTextAttributesKey(name)).getForegroundColor();
    if(c == null || isBackground){
        c = colorsScheme.getAttributes(TextAttributesKey.createTextAttributesKey(name)).getBackgroundColor();
    }
    if(c == null){
        c = colorsScheme.getColor(ColorKey.createColorKey(name));
    }
    return c;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。