Ответ 1
После того, как я столкнулся с такой же трудностью, я нашел решение, ловив рыбу в исходном коде TextView
. Попробуйте следующее:
paint.setTextSkewX(-0.25f);
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));
Итак, теперь вопрос: существует ли известное обходное решение для этого? Моя простая цель - нарисовать некоторые слова с курсивом...
После того, как я столкнулся с такой же трудностью, я нашел решение, ловив рыбу в исходном коде TextView
. Попробуйте следующее:
paint.setTextSkewX(-0.25f);
У меня та же проблема. похоже, что не все шрифты для Android поддерживают стиль ITALIC. Попробуйте следовать, я работал у меня:
paint.setTypeface(Typeface.create(Typeface.SERIF,Typeface.ITALIC));
Прекрасно работает с SERIF. DEFAULT, MONOSPACE, SANS_SERIF использует этот стиль.
P.S. Я говорю об API 10.
Чтобы получить курсивный режим для устройств, которые не поддерживают его для шрифта по умолчанию, мы должны использовать метод setTextSkewX. Однако, прежде чем применять его, мы должны быть уверены, что курсивный режим не поддерживается. Мы достигаем этого, создавая временный объект TextView и измеряя его ширину в обоих режимах (NORMAL и ITALIC). Если их ширина одинаковая, то это означает, что режим ITALIC НЕ поддерживается.
Пожалуйста, взгляните на решение, представленное в другом вопросе: устройства Samsung, поддерживающие setTypeface (Typeface.Italic)?