So reduzieren Sie den TextView Zeilenabstand
Ich versuche, reduzieren Sie den Zeilenabstand in einem TextView durch die Einstellung eines negativen "add", um TextView.setLineSpacing(). Es funktioniert gut, außer, dass die Unterste Zeile abgeschnitten.
Main layout
<TextView
android:id="@+id/text_view"
android:padding="dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
tools:context=".MainActivity" />
Haupttätigkeit: (beachten Sie die
package com.font_test;
import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/custom_fonts.ttf");
final TextView tv = (TextView) findViewById(R.id.text_view);
tv.setTypeface(typeface);
tv.setTextSize(60);
tv.setLineSpacing(-30f, 1f); //*** -30 to reduce line spacing
tv.setBackgroundColor(0x280000ff);
tv.setText("gggkiiikkk" + "\n" + "gikgikgik" + "\n" + "kigkigkig");
}
}
Diese Ergebnisse im abschneiden am unteren Rand der Ansicht (man beachte das 'g' auf der untersten Linie):
Es scheint, dass das problem auf falsche layout-Messung. Wenn ich den TextView zu
android:layout_height="fill_parent"
Tut es richtig dargestellt:
Irgendeine Idee wie es zu lösen ist? Ich kümmere mich nicht um hässliche workarounds, wenn es hilft. Ich habe auch Zugang zu FontForge, und ich kann ändern Sie die schriftart-Datei, wenn nötig.
- Geschieht es mit den eingebauten Schriften als gut? Oder jede andere benutzerdefinierte Schriftarten? Es könnte sein, dass die schriftart ist nicht die Berichterstattung der richtige Abstieg Wert.
- in der letzten Zeile auch
LineSpacing of -30f
anwendet. das ist, warum die Letzte Zeile ist nicht richtig gesehen. so können Sieset bottom padding
30 in Ihrem case...@kcoppock ich glaube nicht, dass irgend etwas falsch indescent values
- Ich bekomme das gleiche problem mit schriftart = Schriftart.SANS_SERIF;
- hinzufügen android:paddingBottom="60dp", fügte ein Rand an der Unterseite, aber die Schrift ist immer noch abgeschnitten. Siehe imgur.com/du5xJ
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die Polsterung nicht funktioniert, Marge sollte den job tun. Wenn Sie noch problem haben, können Sie immer anwenden, Zeilenabstand, den Wert der Methode onMeasure der Ansicht. Sie müssen erstellen Sie eine benutzerdefinierte Komponente und erweitern onMeasure.
littleFluffyKittys Antwort ist gut, aber es hat nicht funktioniert auf einigen Geräten, wenn die linespacing war durch xml -
Ich berechnen Sie die zusätzliche Höhe benötigt, durch den Vergleich der ursprünglichen Höhe der schriftart mit der Höhe der textview berechnet für eine Linie.
Wenn die Zeilenhöhe kleiner ist als die Höhe der schriftart die Unterschiede Hinzugefügt eine Zeit.
Diese eignet sich für bis zu mindestens API 10 vermutlich niedriger (nur nicht getestet untere)
setLineSpacing(float, float)
passt in Ihre Lösung?Ich lief in das gleiche problem aber wenn ich versuche zu verwenden, wird ein Abstand Multiplikator kleiner als 1.
Ich erstellt eine Unterklasse von
TextView
behebt das abschneiden der letzten Zeile automatisch und es nicht erforderlich ist, setzen Sie eine bekannte/Feste Abstand an der Unterseite.Nur diese Klasse verwenden, und Sie können es in der Regel verwenden Sie don ' T benötigen keine zusätzlichen Leerzeichen oder behebt.
Schön!
Das mache den job, aber es ist nie eine gute Idee, um die Konstanten Werte, wo immer wir die Variablen haben. Sie können den lineSpacing-Werte hinzufügen, um Sie der Methode onMeasure in einem dinamyc Weg.
Beachten Sie, dass diese Werte sind immer vorhanden, durch "getLineSpacingExtra()" und "getLineSpacingMultiplier()". Oder noch einfacher, Sie können den Wert abrufen, der sowohl resümierte: "getLineHeight()".
Obwohl es fühlt sich für mich, dass dieser Wert sollte in der Methode onMeasure, kann man immer Messen die exakte Höhe Sie brauchen, und dann machen Sie einen einfachen check:
Eine Letzte Sache, die Sie nicht brauchen, um passieren die Rahmen zusammen in einem separaten Attribut. Wenn Sie schauen, um Ihre Konstruktoren, der Zusammenhang ist schon da. Wenn Sie Bedarf zusammen den code der Komponente, die Sie nutzen können "getContext()".
Hoffe, es hilft.
Verwenden Sie diese zu reduzieren Zeilenabstand in der text-Ansicht
**
**
Fügen Sie einfach paddingBottom zur Erklärung Ihrer TextView xml, wählen Sie einen Wert hervorbringt, die ein gutes Ergebnis. Und damit Werte für andere Polster (top, lassen und rechts). Das sollte dein problem lösen
Dies ist, was ich habe, basierend auf Jose ' s Antwort hier, und es scheint zu funktionieren. Ich bin nicht sehr vertraut mit den komplizierten layout-Mechanismus. Ist dieser code sicher? Irgendein problem mit ihm?
Layout:
Hinzugefügt benutzerdefinierte TextView, erstreckt sich das vertikale Höhe von N Pixeln:
Ergebnis der text-Ansicht Rendern ohne das abschneiden von unten: