如何去除可下载字体的过度行间距?

7
我正在研究在我的Android应用程序中下载字体(和字体作为资源)的问题。
当我将字体放在values/font文件夹中时,它们会按预期显示。
当我使用可下载字体时,它们之间总是有额外的间距。
我必须在我的布局xml中使用android:lineSpacingMultiplier="0.5"来实现所需的间距。
我将字体应用于文本视图并允许其自动换行。
我担心使用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文件夹中的。
以下是问题的截图: 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";但是它没有产生期望的效果。


这个问题怎么能够被downvote?从我的测试来看,这是一个与可下载字体一致的问题,肯定需要解决。 - Hector
1
请问您能否分享一张截图来描述这个问题? - azizbekian
3个回答

3

这可能是有罪的,但我非常想解决行间距问题,添加负值到 lineSpacingExtra 似乎是有效的:

  android:lineSpacingExtra="-4sp"

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

  android:includeFontPadding="false"

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

顺便说一下,我使用的是 sp ,因为这涉及到字体。


0
更新:您的字体“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" />

使用 android:includeFontPadding="false" 对问题没有任何影响。 - Hector
1
@Hector 你试过不同的可下载字体族吗?有同样的问题吗? - Oğuzhan Döngül
是的,我尝试过的每个可下载字体都有同样的问题。 - Hector
刚刚尝试了另一个可下载字体“ACTOR”,并没有出现这个问题。这一定与字体本身有关。 - Hector
1
@Hector 我正要写同样的答案,字体有问题。其他字体没有填充。我更新了我的答案。 - Oğuzhan Döngül

0
请使用以下属性:
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:letterSpacing="0.0"
    android:includeFontPadding="false"/>

android:letterSpacing 只能在21及以上版本中使用,我的应用需要支持从19开始的版本。此外,这并不能解决我的问题。 - Hector

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接