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?

Nate
quelle

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 .

Maragues
quelle
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);
Radiofrequenz
quelle
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"
 ...
 .../>
Bajrang Hudda
quelle
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.

Irshu
quelle
2

Verwenden Sie diesen Code

        TextView textView = new TextView(YourActivity.this);
        textView.setGravity(Gravity.CENTER | Gravity.TOP);
        textView.setText("some text");
Faxriddin Abdullayev
quelle
2
textView.setGravity(Gravity.CENTER | Gravity.BOTTOM);

Dadurch wird die Schwerkraft Ihrer Textansicht festgelegt.

DAS
quelle
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.

Roman Fernandez
quelle