2012-04-14 15 views
6

Ich bin auf ein Problem stecken und ich weiß nicht, was es verursacht. Ich habe ein sehr einfaches Layout wie folgt aus:TextView setGravity() funktioniert nicht in Java

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 
<TextView 
    android:id="@+id/my_text_view" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_gravity="NOTE_THIS" 
    android:textColor="#FFFFFF" 
    android:textSize="22dp" 
    android:text="TestText"/> 
</LinearLayout> 

, die in einem anderen Layout enthalten ist. Wenn ich die Schwerkraft innerhalb des Xml ändere, sehe ich dasselbe Ergebnis im Layout-Editor und auf meinem Handy. Wenn ich die Gravitation programmatisch wie mit myTextView.setGravity(Gravity.CENTER) anwenden möchte, ändert sich nichts. Und ich kann nicht LayoutGravity in Java auf einem TextView

Ich werde für Debug-Zwecke ausprobiert, um sie dreimal jeweils mit einer anderen Schwerkraft einzuschließen, die sogar funktioniert. Ich gehe also davon aus, dass mit meinem Layout alles in Ordnung ist und dass es einen Bug oder etwas anderes geben muss, das ich vermisse. Kann mir jemand einen Hinweis geben, was ich auch versuchen kann, oder was verursacht dieses Problem?

Antwort

24

Ihre Textview die Set Breite wie android:layout_width="fill_parent" dann können Sie es programmatisch myTextView.setGravity(Gravity.CENTER) mit Set

+0

Wie bekomme ich die intrinsicWidth der TextView nachdem ich sie "fill_parent" angegeben habe, weil getWidth mir die Breite der Eltern gibt LienearLayout –

+0

warum brauchst du das? nur zum Einstellen der Schwerkraft? – waqaslam

+0

weil es nicht nur die Schwerkraft setzt, sondern den Text rezitiert, was funktioniert, wenn ich die richtige Breite davon bekomme –

1

Wenn Sie Linearlayout als Mutter verwenden, dann kommt layout_gravity in Bild, das Steuer ausrichten, aber nicht Inhalt innerhalb der Steuer so, Statt android:layout_gravity Verwendung android:gravity verwenden.

+0

Ah leid es war meine Schuld ... Ich möchte LayoutGravity einstellen, weil Gravity nichts tut ... meine Frage aktualisiert –

5

Sie müssen die Schwere der LayoutParams setzen, anstatt das View-Objekt selbst:

TextView tv = new TextView(getApplicationContext()); 
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT); 
lp.gravity = Gravity.CENTER; 
tv.setLayoutParams(lp);