Подтвердить что ты не робот

Настраиваемый рендеринг шрифтов на Android 4.0 (сэндвич с мороженым)

При тестировании приложения, использующего 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);
}
4b9b3361

Ответ 1

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


Update:

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);
    }
}

Ответ 2

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

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

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

textobjext.setTypeface(tf, Typeface.BOLD);

Ответ 3

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

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

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

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

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

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

Android 2.2

Android 2.3

Android 4.0.3

Ответ 4

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, не будут работать, т.е. вам нужен жирный шрифт, курсивный шрифт и т.д.