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)?