Рендеринг пользовательских шрифтов на Android 4.0 (сэндвич с мороженым) - PullRequest
15 голосов
/ 27 января 2012

При тестировании приложения, которое использует Helvetica Neue в качестве основного шрифта на Android 4.0, я обнаружил, что существует несоответствие в рендеринге гарнитуры по сравнению с несколькими различными версиями Android.Мы проверили это на 2.1, 2.2.2, 2.3.5, 3.2, 4.0 и 4.0.3 с одинаковыми результатами каждый раз.Мы также провели эти тесты с различными двоичными файлами шрифтов с одинаковыми результатами.

Любые входные данные или обходные пути будут оценены.

Ниже приведен скриншот из примера приложения, чтобы показать нежелательные результаты, первый2.3.5, второе 4.0.3.

2.3.5

4.0.3

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    TextView textView = new TextView(this);
    textView.setText("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");
    textView.setTypeface(Typeface.createFromAsset(getAssets(), "Helvetica Neue.ttf"));
    textView.setTextSize(9);
    setContentView(textView);
}

Ответы [ 4 ]

8 голосов
/ 06 февраля 2012

Хотя мы так и не нашли решение проблемы рендеринга Helvetica, нам удалось убедить клиента переключиться на Roboto после того, как мы показали ему ошибку на Galaxy Nexus.


Обновление:

public class TextViewCompat extends TextView {

    public TextViewCompat(Context context) {
        super(context);
        setup(context, null, 0);
    }

    public TextViewCompat(Context context, AttributeSet attrs) {
        super(context, attrs);
        setup(context, attrs, 0);
    }

    public TextViewCompat(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setup(context, attrs, defStyle);
    }

    private void setup(Context context, AttributeSet attrs, int defStyle) {
        setPaintFlags(getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);
    }
}
0 голосов
/ 01 февраля 2012

Добавьте файл шрифта типа ttf в папку ресурсов, затем добавьте следующий код

Typeface tf = Typeface.createFromAsset (getBaseContext (). GetAssets (), "Helvetica.ttf");

затем добавьте объект tf в текстовое представление, как показано ниже

textobjext.setTypeface(tf, Typeface.BOLD);
0 голосов
/ 03 февраля 2012

После еще нескольких игр я не смог воспроизвести то, что вы видите.

Приводит меня к мысли, что используемый вами шрифт плохой.

Я установил все свои гарнитурысогласно моему другому ответу, это прекрасно работает для меня, см. экраны:

Таким образом, верхний текст - Roboto-Normal. Затем текст ниже - Roboto-Light, с <b></b> для его strong .

Итак, 3 версии, 3 разных размера экрана, две плотности, ручная настройка гарнитуры.тот же рендеринг.Не уверен, как ты получаешь то, что видишь.Вы пробовали использовать другой шрифт?

Я приведу еще несколько примеров того, что я делаю, если это может помочь?

Android 2.2

Android 2.3

Android 4.0.3

0 голосов
/ 01 февраля 2012

ICS v14 + использует шрифт Roboto, найденный здесь: Дизайн Android

Было бы лучше установить тип лица вручную, если вы хотите, чтобы он отображался одинаково во всех версиях.

Typeface mBoldType = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Bold.ttf");
TextView mTextView = findById(R.id.text1);
mTextView.setTypeface(mBoldType);

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

Если вам нужен пример функции, дайте мне знать.

Что следует отметить, так это то, что если вы установите пользовательскую гарнитуру, такие вещи, как android: fontStyle не будут работать, т. Е. Вам понадобится жирная гарнитура, курсивная гарнитура и т. Д.1014 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...