Android Paint.setTypeface не работает курсивом - PullRequest
10 голосов
/ 25 мая 2011

Paint.setTypeface не работает курсивом, или я делаю что-то неправильно.Я могу создать обычный, жирный, моноширинный и с засечками текст, но я не могу создать курсив.Это всегда выглядит нормально (или в случае полужирного курсива это выглядит жирным шрифтом).

    //This will appear monospace
    paint.setTypeface(Typeface.MONOSPACE);
    canvas.drawText("foo", 10, 10, paint);

    //This will appear serif
    paint.setTypeface(Typeface.SERIF);
    canvas.drawText("foo", 10, 10, paint);

    //This will appear bold
    paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
    canvas.drawText("foo", 10, 10, paint);

    //This will NOT appear italic <===  PROBLEM
    paint.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC));
    canvas.drawText("foo", 10, 10, paint);

    // This isn't working either <===  PROBLEM
    paint.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.ITALIC));

Итак, теперь вопрос: есть ли известное решение для этого?Моя простая цель - нарисовать несколько слов в стиле курсив ...

Ответы [ 3 ]

14 голосов
/ 05 июня 2012

Испытав такую ​​же сложность, я нашел решение, покопавшись в исходном коде TextView.Попробуйте это:

paint.setTextSkewX(-0.25f);
8 голосов
/ 12 мая 2012

У меня такая же проблема. похоже, что не все Android-гарнитуры поддерживают стиль ITALIC. Попробуйте следующее, я работал для меня:

paint.setTypeface(Typeface.create(Typeface.SERIF,Typeface.ITALIC));

Отлично работает только с SERIF. DEFAULT, MONOSPACE, SANS_SERIF игнорирует этот стиль.

P.S. Я говорю об API 10.

1 голос
/ 06 октября 2015

Чтобы получить режим курсива для устройств, которые не поддерживают его для шрифта по умолчанию, мы должны использовать метод setTextSkewX.Однако, прежде чем применять его, мы должны быть уверены, что курсивный режим не поддерживается.Мы достигаем этого, создавая временный объект TextView и измеряя его ширину в обоих режимах (NORMAL и ITALIC).Если их ширина одинакова, это означает, что режим ITALIC НЕ поддерживается.

Пожалуйста, взгляните на решение, представленное в другом вопросе: Устройства Samsung, поддерживающие setTypeface (Typeface.Italic)?

...