Risposta breve: utilizzare android:gravityo setGravity()per controllare la gravità di tutte le viste figlio di un contenitore; utilizzare android:layout_gravityo setLayoutParams()per controllare la gravità di una vista individuale in un contenitore.
Lunga storia: per controllare la gravità in un contenitore di layout lineare come LinearLayouto RadioGroup, ci sono due approcci:
1) Per controllare la gravità di TUTTE le viste figlio di un LinearLayoutcontenitore (come hai fatto nel tuo libro), usa android:gravity(non android:layout_gravity) nel file XML layout o il setGravity()metodo nel codice.
2) Per controllare la gravità di una vista figlio nel suo contenitore, utilizzare l' android:layout_gravityattributo XML. Nel codice, è necessario ottenere LinearLayout.LayoutParamsla vista e impostarne la gravità. Ecco un esempio di codice che imposta un pulsante in basso in un contenitore orientato orizzontalmente:
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);
Per i LinearLayoutcontenitori orizzontali , la gravità orizzontale della vista figlio è allineata a sinistra una dopo l'altra e non può essere modificata. L'impostazione android:layout_gravitysu center_horizontalnon ha alcun effetto. La gravità verticale predefinita è center (o center_vertical) e può essere modificata in alto o in basso. In realtà il layout_gravityvalore predefinito è, -1ma Android lo mette al centro in verticale.
Per modificare le posizioni orizzontali delle viste figlio in un contenitore lineare orizzontale, è possibile utilizzare layout_weight, margine e riempimento della vista figlio.
Analogamente, per il contenitore Gruppo vista verticale, la gravità verticale della vista figlio è allineata in alto una sotto l'altra e non può essere modificata. La gravità orizzontale predefinita è centrale (o center_horizontal) e può essere cambiata a sinistra o a destra.
In realtà, una vista figlio come un pulsante ha anche l' android:gravityattributo XML e il setGravity()metodo per controllare le viste figlio - il testo in essa contenuto. Il Button.setGravity(int)è legata a questa voce di developer.android.com .