Krótka odpowiedź: użyj android:gravity
lub setGravity()
do kontroli grawitacji wszystkich widoków podrzędnych kontenera; używać android:layout_gravity
lub setLayoutParams()
kontrolować grawitację pojedynczego widoku w pojemniku.
Długa historia: aby kontrolować grawitację w kontenerze o układzie liniowym, takim jak LinearLayout
lub RadioGroup
, istnieją dwa podejścia:
1) Aby kontrolować grawitację WSZYSTKICH widoków podrzędnych LinearLayout
kontenera (tak jak w książce), użyj android:gravity
(nie android:layout_gravity
) w pliku XML układu lub setGravity()
metody w kodzie.
2) Aby kontrolować grawitację widoku potomnego w jego kontenerze, użyj android:layout_gravity
atrybutu XML. W kodzie należy uzyskać LinearLayout.LayoutParams
widok i ustawić jego grawitację. Oto przykład kodu, który ustawia przycisk na dole w poziomo zorientowanym kontenerze:
import android.widget.LinearLayout.LayoutParams;
import android.view.Gravity;
...
Button button = (Button) findViewById(R.id.MyButtonId);
// need to cast to LinearLayout.LayoutParams to access the gravity field
LayoutParams params = (LayoutParams)button.getLayoutParams();
params.gravity = Gravity.BOTTOM;
button.setLayoutParams(params);
W przypadku LinearLayout
kontenera poziomego grawitacja pozioma jego widoku potomnego jest wyrównana do lewej jeden po drugim i nie można go zmienić. Ustawienie android:layout_gravity
na center_horizontal
nie ma wpływu. Domyślna grawitacja pionowa to środek (lub środek_werkalny) i można ją zmienić na górną lub dolną. W rzeczywistości layout_gravity
wartością domyślną jest, -1
ale Android ustawia ją w pozycji środkowej w pionie.
Aby zmienić poziome pozycje widoków potomnych w poziomym pojemniku liniowym, można użyć layout_weight
marginesu i wypełnienia widoku potomnego.
Podobnie w przypadku pionowego kontenera grupy widoków, pionowy ciężar jego widoku potomnego jest wyrównany do góry jeden pod drugim i nie można go zmienić. Domyślna grawitacja pozioma to środek (lub center_horizontal
) i można ją zmienić w lewo lub w prawo.
W rzeczywistości widok potomny, taki jak przycisk, ma również android:gravity
atrybut XML i setGravity()
metodę kontrolowania jego widoków potomnych - tekstu w nim. Button.setGravity(int)
Jest związana z tym wejściem developer.android.com .