Android Paint.setTypeface не работает курсивом

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 ответа

Решение

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

paint.setTextSkewX(-0.25f);

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

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

Работает нормально только с SERIF. DEFAULT, MONOSPACE, SANS_SERIF поддерживает этот стиль.

PS Я говорю об API 10.

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

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

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