Vous avez besoin d'un ViewGroup car il s'agit de la classe de base pour les présentations et les conteneurs de vues. Si vous ne souhaitez pas utiliser une disposition linéaire, vous pouvez utiliser une disposition de contrainte. Les mises en page contraintes sont fournies avec Guidelines - elles peuvent vous aider à mesurer un pourcentage spécifique de l'écran et à aligner les boutons (ou les vues) à côté d'eux.
L'image est au-dessus d'un exemple de la façon dont fonctionnent les lignes directrices. La première est une ligne directrice verticale qui occupe 25% de l'écran (vous pouvez penser à la division verticale de l'écran en 4 parties). La seconde est une ligne directrice horizontale qui occupe 50% de l'écran (en divisant l'écran horizontalement en deux parties).
Je veux ajouter un certain nombre de boutons qui doivent être un certain% de l'écran Largeur
Vous pouvez y parvenir avec des lignes directrices. Voici comment le faire en utilisant seulement xml:
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.chornge.myapplication.MainActivity">
<android.support.constraint.Guideline
android:id="@+id/vertical_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.25" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="@id/vertical_guideline" />
<android.support.constraint.Guideline
android:id="@+id/horizontal_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.50" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/horizontal_guideline" />
</android.support.constraint.ConstraintLayout>
Et voici comment créer le même effet en utilisant uniquement Java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
ConstraintLayout constraintLayout = new ConstraintLayout(this);
constraintLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
setContentView(constraintLayout);
/* vertical guideline */
Guideline verticalGuide = new Guideline(this);
ConstraintLayout.LayoutParams verticalGuideParams =
new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
verticalGuideParams.guidePercent = 0.25f;
verticalGuideParams.orientation = LinearLayout.VERTICAL;
verticalGuide.setLayoutParams(verticalGuideParams);
verticalGuide.setId(View.generateViewId());
constraintLayout.addView(verticalGuide);
/* create button1 and align its left edge to the right edge of vertical guideline*/
Button button1 = new Button(this);
button1.setId(View.generateViewId());
ConstraintLayout.LayoutParams button1Params =
new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
button1Params.leftToRight = verticalGuide.getId();
button1.setLayoutParams(button1Params);
constraintLayout.addView(button1);
/* horizontal guideline */
Guideline horizontalGuide = new Guideline(this);
ConstraintLayout.LayoutParams horizontalGuideParams =
new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
horizontalGuideParams.guidePercent = 0.5f;
horizontalGuideParams.orientation = LinearLayout.HORIZONTAL;
horizontalGuide.setLayoutParams(horizontalGuideParams);
horizontalGuide.setId(View.generateViewId());
constraintLayout.addView(horizontalGuide);
/* create button2 and align its top edge to the bottom edge of horizontal guideline*/
Button button2 = new Button(this);
button2.setId(View.generateViewId());
ConstraintLayout.LayoutParams button2Params =
new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
button2Params.topToBottom = horizontalGuide.getId();
button2.setLayoutParams(button2Params);
constraintLayout.addView(button2);
}
Remarque:
- Vous avez encore besoin d'un ViewGroup être votre classe de base (soit LinearLayout ou RelativeLayout ou ConstraintLayout)
- Vous pouvez faire n'importe quelle vue (Button, Tex TVIEW, EditText, etc.) avec un autre alignement ou Voir ViewGroup en utilisant
topToTop
ou topToBottom
ou bottomToTop
ou bottomToBottom
ou leftToLeft
ou leftToRight
ou rightToLeft
ou rightToRight
.
- Vous pouvez utiliser n'importe quel pourcentage que vous voulez pour vos lignes directrices: 5%, 33,3%, 80% qui se traduit par
0.05f
, 0.333f
, 0.8f
, respectivement.
L'activité a un ViewGroup qui est la vue racine. Vous devez attacher les boutons à ce ViewGroup. –