So stellen Sie Android: Gravity von Java-Seite in Android auf TextView ein


218

Ich kann android:gravity="bottom|center_horizontal"in XML in einer Textansicht meine gewünschten Ergebnisse erzielen, muss dies jedoch programmgesteuert tun. Meine Textansicht befindet sich in a, tablerowwenn das in a wichtig ist relativelayout.

Ich habe versucht:

LayoutParams layoutParams = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
labelTV.setLayoutParams(layoutParams);

Aber wenn ich richtig verstehe, würde das auf die tablerow, nicht auf die Textansicht angewendet werden?

Antworten:


522
labelTV.setGravity(Gravity.CENTER | Gravity.BOTTOM);

Kotlin-Version (danke an Thommy)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

Sprechen Sie auch über die Schwerkraft oder über layout_gravity? Letzteres funktioniert in einem RelativeLayout nicht .


Danke, das hat funktioniert. Ich fühle mich jetzt ein bisschen albern, weil ich das verpasst habe. Ursprünglich bestand das Problem darin, die Ränder in einem Textfeld festzulegen. Ich denke, ich habe angenommen, weil ich keine setMargin () -Methode finden konnte, dass setGravity auch nicht existieren würde.
Nate

7
Dank +1 habe ich die Dokumentation gefunden, aber wie üblich geht sie nur zur Hälfte und gibt nicht eindeutig an, woher ich die Schwerkraftkonstanten habe (Gravity.CENTER usw.).
Hein du Plessis

1
Für jeden, der wie ich von Google hierher kommt, ist der Kotlin-Weg:it.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
Thommy

Für mich ist der Kotlin-Weg verwirrend, warum ist es so orund nicht and?! ??!
ZooMagic

38

Dadurch wird der Text in einer Textansicht zentriert:

TextView ta = (TextView) findViewById(R.layout.text_view);
LayoutParams lp = new LayoutParams();
lp.gravity = Gravity.CENTER_HORIZONTAL;
ta.setLayoutParams(lp);

5
Das hat nicht funktioniert. "lp.gravity kann nicht aufgelöst werden oder ist kein Feld"
Nate

Das ist seltsam, weil dieser Code funktioniert und für mich gut kompiliert wird. Wie würden Sie das Gewicht einer Textansicht festlegen, da es sich nicht um eine setWeight () -Methode handelt?
Hochfrequenz

4
Ich habe das Problem gefunden. Nate importiert android.view.ViewGroup. Diese Klasse hat verschiedene Methoden und wird nicht kompiliert. Sie sollten stattdessen android.view.WindowManager importieren.
Finnboy11

Sollte android.widget.LinearLayout.LayoutParams besser importieren, wenn sich die Textansicht im linearen Layout befindet. Andernfalls erhalten Sie ClassCastException
bis

Danke, es funktioniert. Es ist jedoch keine vollständige Lösung, da ein Typ von LayoutParamshier nicht definiert ist und variieren kann, sodass er nicht kompiliert werden kann. Sie sollten ein übergeordnetes Layout kennen (zum Beispiel LinearLayout) und es hier schreiben.
CoolMind

7

Wir können die Schwerkraft des Layouts in jeder Ansicht wie unten einstellen.

myView = findViewById(R.id.myView);
myView.setGravity(Gravity.CENTER_VERTICAL|Gravity.RIGHT);
 or
myView.setGravity(Gravity.BOTTOM);

Dies entspricht dem folgenden XML-Code

<...
 android:gravity="center_vertical|right"
 ...
 .../>

Layout Schwerkraft ist nicht gleich Schwerkraft
Zvonimir Peran

3

Sie sollten verwenden textView.setGravity(Gravity.CENTER_HORIZONTAL);.

Denken Sie daran, dass mit

LinearLayout.LayoutParams layoutParams =new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
layoutParams2.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;

wird nicht funktionieren. Dadurch wird die Schwerkraft für das Widget und nicht für den Text festgelegt.


2

Verwenden Sie diesen Code

        TextView textView = new TextView(YourActivity.this);
        textView.setGravity(Gravity.CENTER | Gravity.TOP);
        textView.setText("some text");

2
textView.setGravity(Gravity.CENTER | Gravity.BOTTOM);

Dadurch wird die Schwerkraft Ihrer Textansicht festgelegt.


0

Dies wurde gelöst, indem ein paar Dinge getan wurden, zuerst das heightvon mir TextViewabgerufen und durch den Text getaucht wurde size, um die Gesamtanzahl der mit dem möglichen Zeilen zu erhalten TextView.

int maxLines = (int) TextView.getHeight() / (int) TextView.getTextSize();

Nachdem Sie diesen Wert erhalten haben, müssen Sie Ihren TextView maxLinesWert auf diesen neuen Wert einstellen .

TextView.setMaxLines(maxLines);

Stellen Sie den Wert Gravityauf ein, Bottomsobald die maximale Zeilenanzahl überschritten wurde und automatisch nach unten gescrollt wird.

if (TextView.getLineCount() >= maxLines) {
    TextView.setGravity(Gravity.BOTTOM);
}

Damit dies korrekt funktionieren kann , müssen Sie verwenden , append()um das TextView, wenn Sie setText()dies nicht funktionieren wird .

TextView.append("Your Text");

Der Vorteil dieser Methode ist, dass sie unabhängig heightvon Ihrem TextViewund dem Text dynamisch verwendet werden kann size. Wenn Sie Änderungen an Ihrem Layout vornehmen, funktioniert dieser Code weiterhin.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.