Roboto не отображается правильно с арабским языком

У меня проблема с шрифтом Roboto, когда арабский язык отображается неправильно, на шрифтах я не очень подготовлен, но думаю, что он не поддерживает арабский юникод.

Мой проект имеет дело с материальной темой для свинга, и поэтому я не буду менять шрифты для поддержки арабского языка, поэтому я подумал, что при загрузке темы я проверяю раскладку клавиатуры и, если этот язык не поддерживается роботом, то меняю шрифт на загрузка, это единственное решение, которое я смог найти, но оно не работает для устройств без клавиатуры.

Теперь я хотел бы задать вам два вопроса:

  • Можно ли там найти шрифт roboto, который поддерживает арабский язык и языки этой линии?
  • Есть ли лучшее решение, чем мое, если мне нужно изменить шрифт для поддержки?

---------- Проблема Загрузка шрифта в GraphicsEnvironment ------- Я переписал шрифты разных типов, и теперь с помощью метода, написанного мной, я иду, чтобы установить шрифт в соответствии со стилем и поддержкой из строки, но я получаю эту проблему, когда я иду, чтобы сделать внешний вид

static {
    try {
        //Noto sans
        Font black = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/NotoSans/NotoSans-Black.ttf"));
        Font blackItalic = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/NotoSans/NotoSans-BlackItalic.ttf"));
        Font bold = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/NotoSans/NotoSans-Bold.ttf"));
        Font boldItalic = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/NotoSans/NotoSans-BoldItalic.ttf"));
        Font italic = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/NotoSans/NotoSans-Italic.ttf"));
        Font light = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/NotoSans/NotoSans-Light.ttf"));
        Font lightItalic = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/NotoSans/NotoSans-LightItalic.ttf"));
        Font medium = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/NotoSans/NotoSans-Medium.ttf"));
        Font mediumItalic = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/NotoSans/NotoSans-MediumItalic.ttf"));
        Font regular = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/NotoSans/NotoSans-Regular.ttf"));
        Font thin = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/NotoSans/NotoSans-Thin.ttf"));
        Font thinItalic = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/NotoSans/NotoSans-ThinItalic.ttf"));
        //Register font
        GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
        graphicsEnvironment.registerFont(black);
        graphicsEnvironment.registerFont(blackItalic);
        graphicsEnvironment.registerFont(bold);
        graphicsEnvironment.registerFont(boldItalic);
        graphicsEnvironment.registerFont(italic);
        graphicsEnvironment.registerFont(light);
        graphicsEnvironment.registerFont(lightItalic);
        graphicsEnvironment.registerFont(medium);
        graphicsEnvironment.registerFont(mediumItalic);
        graphicsEnvironment.registerFont(regular);
        graphicsEnvironment.registerFont(thin);
        graphicsEnvironment.registerFont(thinItalic);

        black = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/Roboto/Roboto-Black.ttf"));
        //blackItalic = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/Roboto/Roboto-BlackItalic.ttf"));
        bold = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/Roboto/Roboto-Bold.ttf"));
        boldItalic = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/Roboto/Roboto-BoldItalic.ttf"));
        italic = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/Roboto/Roboto-Italic.ttf"));
        light = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/Roboto/Roboto-Light.ttf"));
        lightItalic = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/Roboto/Roboto-LightItalic.ttf"));
        medium = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/Roboto/Roboto-Medium.ttf"));
        mediumItalic = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/Roboto/Roboto-MediumItalic.ttf"));
        regular = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/Roboto/Roboto-Regular.ttf"));
        thin = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/Roboto/Roboto-Thin.ttf"));
        thinItalic = Font.createFont(Font.TRUETYPE_FONT, new File("src/main/resources/fonts/Roboto/Roboto-ThinItalic.ttf"));

        //register font
        graphicsEnvironment.registerFont(black);
        //graphicsEnvironment.registerFont(blackItalic);
        graphicsEnvironment.registerFont(bold);
        graphicsEnvironment.registerFont(boldItalic);
        graphicsEnvironment.registerFont(italic);
        graphicsEnvironment.registerFont(light);
        graphicsEnvironment.registerFont(lightItalic);
        graphicsEnvironment.registerFont(medium);
        graphicsEnvironment.registerFont(mediumItalic);
        graphicsEnvironment.registerFont(regular);
        graphicsEnvironment.registerFont(thin);
        graphicsEnvironment.registerFont(thinItalic);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (FontFormatException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static Font getFont(String textCompatibily, String tipeFont){
    String familyFontRoboto = "Roboto";
    String familyFontNotoSans = "Noto Sans";
    GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
    //System.out.println(familyFontRoboto + " " + tipeFont);
    for(Font font : graphicsEnvironment.getAllFonts()){
        if(font.canDisplayUpTo(textCompatibily) < 0){
            if(font.getName().equals(familyFontRoboto + " " + tipeFont)){
                System.out.println("Roboto ok");
                System.out.println(font.toString());
                return font;
            }
        }
    }
    for(Font font : graphicsEnvironment.getAllFonts()){
        if(font.canDisplayUpTo(textCompatibily) < 0){
            if(font.getName().equals(familyFontNotoSans + " " + tipeFont)){
                System.out.println("noto sans ok");
                return font;
            }
        }
    }
    System.out.print("ops");
    return graphicsEnvironment.getAllFonts()[0]; // Noto sans dovrebbe coprire tutto, altrimenti questa cosa si allunga
}

установка шрифта на кнопку

Font font = MaterialFonts.getFont(button.getText(), "Black");
    button.setFont (font);

проблема рендеринга введите описание изображения здесь

1 ответ

"Roboto" принадлежит Google... Он не поддерживает арабский язык... Google использует резервный шрифт с именем "noto font", где "roboto" не поддерживается...

Другие вопросы по тегам