2017-10-03 3 views
0

J'ai une disposition Activity_main vide. Je veux ajouter un certain nombre de boutons qui doivent être un certain% de la largeur de l'écran et pour cette raison je veux les ajouter par programmation. Chaque exemple sur ce site utilise un LinearLayout. Est-il possible d'ajouter un bouton directement à l'Activity_main?Est-il possible d'ajouter un bouton à MainActivity vide dans Android?

Merci.

+0

L'activité a un ViewGroup qui est la vue racine. Vous devez attacher les boutons à ce ViewGroup. –

Répondre

3

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.

guidelines with constraintlayout

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.
+1

cela fonctionne parfaitement – Pizzarius