如何删除可下载字体的过多行间距?

时间:2018-04-05 14:58:44

标签: android android-fonts

我正在调查当前Android应用程序中的可下载字体(和字体作为资源)。

当我将字体放在values/font文件夹中时,它们会根据需要显示。

当我使用可下载字体时,它们之间总是有额外的间距。

我必须在布局xml中使用android:lineSpacingMultiplier="0.5"来获得所需的间距。

我将字体应用于textview并允许它包装内容。

我担心使用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>

&#34;可下载&#34;字体是

android:fontFamily="@font/inknut_antiqua_light"

所有其他字体都是我手动放在/font文件夹中的字体。

以下是该问题的屏幕截图:

enter image description here

这个可下载的字体看起来不错

<?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";它没有达到预期的效果。

3 个答案:

答案 0 :(得分:1)

  

更新:您的字体“inknut_antiqua_light”存在大空字符的问题。其他字体没有这个问题。您可以检查字体空间   下面:

enter image description here

您可以尝试通过将此行添加到所需的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" />

答案 1 :(得分:0)

使用以下属性:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:letterSpacing="0.0"
    android:includeFontPadding="false"/>

答案 2 :(得分:0)

这对我来说可能是罪过的,但我非常想解决行距问题,并且向lineSpacingExtra添加负值似乎可行:

  android:lineSpacingExtra="-4sp"

对于TextView顶部和底部的“字体填充”,您可以使用

  android:includeFontPadding="false"

我已经在Android 5.1.1和7.0上进行了测试。

好,我正在使用 sp ,因为这是在处理字体。