代码之家  ›  专栏  ›  技术社区  ›  Francesco Galgani

Codename One-放大或缩小所有样式中所有字体的方法

  •  1
  • Francesco Galgani  · 技术社区  · 6 年前

    假设我有一个代号为One的应用程序具有一组复杂的主题(重叠),或者一个只有一个复杂主题的应用程序。

    我的问题是,我是否可以用简单的Java代码将所有样式的所有字体大小(以mm为单位)放大或缩小一个给定的百分比。

    我知道我可以覆盖一个改变所有字体大小的主题,但在某些情况下可能会很痛苦。

    2 回复  |  直到 6 年前
        1
  •  2
  •   tizbn    6 年前
    int fontSize = Display.getInstance().convertToPixels(3);
    Font tt  = Font.createTrueTypeFont(s, s).derive(fontSize, Font.STYLE_PLAIN);
    

    有关更多信息,请参阅此链接

    https://www.codenameone.com/javadoc/com/codename1/ui/Font.html

        2
  •  0
  •   Francesco Galgani    6 年前

    谢谢Shai和tizbn,我仔细考虑了你的两个答案。之后,我创建了以下方法来完成我的要求,也许对其他人有用。

    /**
     * Increases or reduces of a given percentage all the font sizes of a given
     * theme, overlaying a new theme containing only the new font sizes. The
     * font sizes will be increased when the percentage is positive, they will
     * be reduced when the percentage is negative. Legal percentage values are
     * from -90 to 300.
     *
     * Example of usage: changeFontSizesOfTheme(theme, "Theme", 50);
     *
     * @param theme the given resource file
     * @param themeName the name of given theme
     * @param percentage the given percentage to increase or reduce the font
     * sizes
     */
    public static void changeFontSizesOfTheme(Resources theme, String themeName, int percentage) {
        if (theme.isTheme(themeName) && percentage != 0 && percentage >= -90 && percentage <= 300) {
            Hashtable hashtable = theme.getTheme("Theme");
            Hashtable overlay = new Hashtable();
            Set<String> keys = hashtable.keySet();
            Iterator<String> itr = keys.iterator();
            String key;
            Object value;
            int count = 0;
            while (itr.hasNext()) {
                key = itr.next();
                value = hashtable.get(key);
                if (value instanceof Font) {
                    Font originalFont = (Font) value;
                    float originalFontSize = originalFont.getPixelSize();
                    float newFontSize = originalFontSize * (100 + percentage) / 100;
                    overlay.put(key, originalFont.derive(newFontSize, originalFont.getStyle()));
                    count++;
                }
            }
            UIManager.getInstance().addThemeProps(overlay);
            Log.p(count + " font sizes of the theme \"" + themeName + "\" were overlayed");
        }
    }