Как удалить избыточный межстрочный интервал загружаемых шрифтов?

Я изучаю загружаемые шрифты (и шрифты как ресурсы) в моем текущем приложении для Android.

Когда я помещаю шрифты в папку values/font, они отображаются по желанию.

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

Я должен использовать android:lineSpacingMultiplier="0.5" в моем макете xml для достижения желаемого интервала.

Я применяю шрифты к текстовому представлению и позволяю ему обертывать содержимое.

Я обеспокоен тем, что использование android:lineSpacingMultiplier может "обрезать" некоторые символы.

Что я делаю (или не делаю), чтобы создать эту проблему с интервалом между текстами?

Вот мой макет xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:fontFamily="@font/lexie_readable_regular"
        android:padding="4dp"
        android:text="@string/testing"
        android:textColor="@color/daynight_textColor"
        android:textSize="18sp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:fontFamily="@font/inknut_antiqua_light"
        android:padding="4dp"
        android:text="@string/testing"
        android:textColor="@color/daynight_textColor"
        android:textSize="18sp"
        android:textStyle="normal" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:fontFamily="@font/tiresias_infofont"
        android:padding="4dp"
        android:text="@string/testing"
        android:textColor="@color/daynight_textColor"
        android:textSize="18sp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:fontFamily="@font/aphont_regular_q15c"
        android:padding="4dp"
        android:text="@string/testing"
        android:textColor="@color/daynight_textColor"
        android:textSize="18sp" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="CLICK ME"
        android:textColor="@color/daynight_textColor" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:layout_gravity="center"
        android:src="@drawable/placeholder" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/txtNightMode"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:fontFamily="@font/tiresias_infofont"
            android:paddingRight="8dp"
            android:text="Night Mode"
            android:textColor="@color/daynight_textColor" />


        <android.support.v7.widget.SwitchCompat
            android:id="@+id/switchCompat"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:checked="false"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:theme="@style/MySwitch" />

    </LinearLayout>

</LinearLayout>

«Загружаемый» шрифт

android:fontFamily="@font/inknut_antiqua_light"

Все остальные шрифты я вручную поместил в папку /font.

А вот скриншот проблемы:

введите описание изображения здесь

Этот загружаемый шрифт выглядит нормально

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto"
        app:fontProviderAuthority="com.google.android.gms.fonts"
        app:fontProviderPackage="com.google.android.gms"
        app:fontProviderQuery="Actor"
        app:fontProviderCerts="@array/com_google_android_gms_fonts_certs">
</font-family>

в то время как у этого есть проблема, показанная выше:

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto"
        app:fontProviderAuthority="com.google.android.gms.fonts"
        app:fontProviderPackage="com.google.android.gms"
        app:fontProviderQuery="name=Inknut Antiqua"
        app:fontProviderCerts="@array/com_google_android_gms_fonts_certs">
</font-family>

В чем разница?

Я пытался использовать android:includeFontPadding="false"; это не дает желаемого эффекта.


person Hector    schedule 05.04.2018    source источник
comment
как этот вопрос может претендовать на отрицательный голос? Из моего тестирования это постоянная проблема с загружаемыми шрифтами, безусловно, ее нужно решить.   -  person Hector    schedule 06.04.2018
comment
Не могли бы вы поделиться скриншотом, изображающим проблему?   -  person azizbekian    schedule 12.04.2018


Ответы (3)


Это, вероятно, грешно с моей стороны, но я отчаянно пытался решить проблему межстрочного интервала, и добавление отрицательного значения к lineSpacingExtra, похоже, сработало:

  android:lineSpacingExtra="-4sp"

Для «заполнения шрифта» вверху и внизу TextView вы можете использовать

  android:includeFontPadding="false"

Я тестировал на Android 5.1.1 и 7.0.

К вашему сведению, я использую sp, потому что это касается шрифтов.

person Aba    schedule 01.11.2018

ОБНОВЛЕНИЕ: Ваш шрифт "inknut_antiqua_light" имеет проблему с большим пустым пространством. Другие шрифты работают без этой проблемы. Вы можете проверить пространство шрифта ниже:

введите здесь описание изображения

Вы можете попробовать удалить отступы шрифта, добавив эту строку в желаемый TextView

android:includeFontPadding="false"

Как это:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:fontFamily="@font/inknut_antiqua_light"
    android:padding="4dp"
    android:includeFontPadding="false"
    android:text="@string/testing"
    android:textColor="@color/daynight_textColor"
    android:textSize="18sp"
    android:textStyle="normal" />
person Oğuzhan Döngül    schedule 12.04.2018
comment
использование android:includeFontPadding=false не повлияло на проблему - person Hector; 12.04.2018
comment
@ Гектор, вы пробовали какое-либо другое загружаемое семейство шрифтов? Есть такая же проблема? - person Oğuzhan Döngül; 12.04.2018
comment
да, у каждого загружаемого шрифта, который я пробовал, была одна и та же проблема - person Hector; 12.04.2018
comment
только что попробовал с другим загружаемым шрифтом ACTOR, и у него нет проблемы. Он должен быть связан с самим шрифтом - person Hector; 12.04.2018
comment
@ Гектор Я собирался написать тот же ответ, проблема со шрифтом. Другие шрифты не имеют отступов. Обновил мой ответ. - person Oğuzhan Döngül; 12.04.2018

Используйте следующие атрибуты:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:letterSpacing="0.0"
    android:includeFontPadding="false"/>
person ANUJ TAYAL    schedule 18.04.2018
comment
android:letterSpacing доступен только с 21 и выше, мое приложение должно поддерживать с 19. Кроме того, это не решает мою проблему - person Hector; 18.04.2018