TextView - Das programmgesteuerte Einstellen der Textgröße scheint nicht zu funktionieren

140

Ich verwende Eclipse Indigo und teste auf 2 Emulatoren (2.2 und 3.0).

Der folgende Code zeigt, was ich gerade teste. Wenn Sie jedoch die Textgröße ausführen, wird beim Ausführen des Emulators nichts auf dem Bildschirm angezeigt (wenn ich die Textgröße auskommentiere, wird der Text rot angezeigt). Ich dachte, dass Eclipse den Code irgendwie nicht neu erstellt, aber ich habe die Codezeile hinzugefügt, um den blauen Hintergrund hinzuzufügen, und das hat funktioniert. Ich habe versucht, die Textgröße nach dem Einstellen des Textes ohne Erfolg einzustellen. Der Code ist unten. danke für Ihre Hilfe! (Haftungsausschluss) - Ich versuche, mich von XML fernzuhalten. Da ich Java bereits kenne, möchte ich mich nicht darauf verlassen.

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

public class TestAndroidvs2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView text = new TextView(this);
    text.setTextColor(Color.RED);
    text.setTextSize(2);    
    text.setBackgroundColor(Color.BLUE);
    text.setText("Hello Android");


    setContentView(text);
  }
}
cspam
quelle

Antworten:

19

Textgröße 2 ist praktisch unsichtbar. Versuchen Sie es mit mindestens 14. Übrigens hat die Verwendung von XML viele Vorteile und erleichtert Ihnen das Leben, wenn Sie etwas Komplexeres als "Hallo Welt" tun müssen.

Nikolay Elenkov
quelle
Ich werde es mit 14 versuchen. Wie ich im ersten Beitrag sagte - selbst wenn 2 zu klein ist, sollte das meinen Bildschirm nicht leer machen, oder? Ich glaube, ich habe es als Maßstab gelesen, der über den Text hinausgeht, anstatt einfach nur die Größe einzustellen. - Ich werde schauen, aber ich werde trotzdem fragen - Was ist die Standardgröße? trotzdem danke.
cspam
Übrigens - ja, ich weiß, dass XML seine Vorteile haben kann, aber ich habe keine Erfahrung damit. Ja, ich weiß, dass es wahrscheinlich leicht zu lernen ist. Da ich bereits mit Java vertraut bin, dachte ich nur, es wäre wirklich nützlich, sich mit so vielen Klassen wie möglich vertraut zu machen. Es scheint, dass die Verwendung von XML viel davon vor Ihnen verbirgt.
cspam
Es verbirgt es nicht - es sind dieselben Klassen mit denselben Parametern. Es dauert einige Zeit, um zwischen den beiden übersetzen zu können, aber es ist tatsächlich ziemlich effizient. Wenn Sie Ansichten in XML definieren, kümmert sich das System als Bonus um unterschiedliche Bildschirmgrößen, -dichten und -ausrichtungen, ohne dass Sie Ihren Code ändern müssen, sondern nur die Layoutdateien.
Nikolay Elenkov
Könnten Sie die Layouts und Ausrichtungen zur Laufzeit basierend auf einer Reihe von Faktoren ändern?
cspam
Das sind sehr weit gefasste Fragen, aber kurz gesagt, ja. Selbst wenn Sie Ihre Benutzeroberfläche in XML definieren, können Sie zur Laufzeit Ansichten hinzufügen / entfernen. Sie können das Standardverhalten auch überschreiben und Orientierungsänderungen selbst vornehmen.
Nikolay Elenkov
533

Die Methode TextView.setTextSize(int unit , float size);akzeptiert zwei Parameter.

Versuche dies :

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

verweise dies und das .

UPDATE: Jetzt setTextSize(float size)wird die Textgröße automatisch in " scaled pixel" Einheiten eingestellt. Sie müssen COMPLEX_UNIT_SP nicht manuell erwähnen. Siehe die Dokumentation .

Houcine
quelle
36
Dies ist die richtige Antwort. Genauer gesagt: float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
Brill Pappin
2
Vielen Dank!
DmitryKanunnikoff
72

Dies hat das Problem für mich behoben. Ich habe auf allen Geräten eine einheitliche Schriftgröße.

 textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.font));
Vikas
quelle
Ist R.dimen.font eine einheitliche Nummer oder haben Sie unterschiedliche Größen für unterschiedliche Geräte?
The_Martian
In meinem Fall habe ich die Schriftart in den Dateien dimen.xml in diesen Ordnern deklariert: Werte, Werte-sw600dp, Werte-sw720dp mit bestimmten Werten.
Vikas
Es ist seltsam, dass TextView nach dem Aufruf von textView.setTextSize (R.dimen.text_size_max) verschwunden ist, aber verwenden Sie Ihre Methode, es funktioniert.
li2
Funktioniert bei mir. Danke dir!
Apurv Thakkar
24

Derzeit funktioniert diesetTextSize(float size) Methode gut, sodass wir keine andere Methode zum Ändern der Textgröße verwenden müssen

android.widget.TextView.java Quellcode

/**
 * Set the default text size to the given value, interpreted as "scaled
 * pixel" units.  This size is adjusted based on the current density and
 * user font size preference.
 *
 * <p>Note: if this TextView has the auto-size feature enabled than this function is no-op.
 *
 * @param size The scaled pixel size.
 *
 * @attr ref android.R.styleable#TextView_textSize
 */
@android.view.RemotableViewMethod
public void setTextSize(float size) {
    setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}

Beispiel mit

textView.setTextSize(20); // set your text size = 20sp
Phan Van Linh
quelle
Link zur AOSP TextView-Quelle: github.com/aosp-mirror/platform_frameworks_base/blob/…
Albert Vila Calvo
12

Weitere Informationen zum Festlegen der Textgröße im Code finden Sie unter diesem Link. Grundsätzlich heißt es:

public void setTextSize (int unit, float size)

Seit: API-Ebene 1 Legen Sie die Standardtextgröße auf eine bestimmte Einheit und einen bestimmten Wert fest. Die möglichen Maßeinheiten finden Sie unter TypedValue . Verwandte XML-Attribute

android: textSize Parameter

Einheit Die gewünschte Maßeinheit.
Größe Die gewünschte Größe in den angegebenen Einheiten.

Jack
quelle
1
Ich habe gerade Eclipse in meinem Code doppelt eingecheckt und laut Intellisense habe ich tatsächlich 2 Optionen für setTextSize, setTextSize (Float-Größe), setTextSize (int-Einheit, Float-Größe). Die von Ihnen verknüpfte Dokumentation bestätigt dies.
cspam
Richtig - hast du es versucht? Auch Nikolay sagt, dass 2 viel zu klein sein wird, um zu sehen, versuchen Sie auch zu erhöhen.
Jack
Ja, aber das Problem ist, wenn ich versuche, es so zu machen, wie ich es jetzt habe, wird der Text nicht einmal angezeigt. Es ist nur ein leerer Bildschirm. Auch wenn 2 nicht auffiel, warum ist der Bildschirm leer?
cspam
Es ist nicht leer. Wenn Sie genau hinsehen, können Sie die kleinen roten Pixel sehen :). Erhöhen Sie die Größe schrittweise, um zu sehen.
Nikolay Elenkov
Übrigens entspricht setTextSize (float) setTextSize (COMPLEX_UNIT_SP, float).
Nikolay Elenkov
10

In meinem Fall verwendete diese Methode :

public static float pxFromDp(float dp, Context mContext) {
    return dp * mContext.getResources().getDisplayMetrics().density;
}

Hier stellen Textview die Textsize Programatically :

textView.setTextSize(pxFromDp(18, YourActivity.this));

Genieße weiter :)

Dhruv Raval
quelle
Hallo @Dhruv Raval, ich nehme auf, um die Schriftgröße in meinem Projekt anpassen zu können, falls dieser Wert 18 für eine Bildschirmdichte gültig ist, oder sollte ich für jeden Bildschirm eine Dimension erstellen?
Armando Marques Sobrinho