2016-04-07 2 views
0

J'essayais de créer une matrice en utilisant un bouton avec une certaine dimension 4x4 en utilisant FrameLayout.Ajout d'un bouton Android dans FrameLayout par programmation

button = new Button[16]; 
for(int i = 0; i < button.length; i++) 
{ 
    button[i] = new Button(this); 
    button[i].setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
    button[i].setText("" + i); 
    button[i].setOnClickListener(this); 
    frameLayout.addView(button[i]); 
} 

Ici, j'ai créé des boutons mais ils se chevauchent lorsque j'exécute le programme.

J'apprécierais vraiment si quelqu'un me dirait comment je peux aligner des boutons dans frameLayout pour faire la matrice 4x4?

Répondre

0

essayer,

mettre ceci dans votre xml:

<LinearLayout 
    android:id="@+id/linearlayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"/> 

Et mettre ce code en vous activité:

LinearLayout linearlayout = (LinearLayout) findViewById(R.id.linearlayout); 

for (int i = 1; i <= 4; i++) { 
     LinearLayout linearLayoutHoriztonal = new LinearLayout(this); 
     linearLayoutHoriztonal.setOrientation(LinearLayout.HORIZONTAL); 

     for (int j = 1; j <= 4; j++) { 

      linearLayoutHoriztonal.addView(createButton("" + i)); 
     } 
     linearlayout.addView(linearLayoutHoriztonal); 
    } 

Ajouter cette méthode pour créer un Boutons:

private Button createButton(String number) { 
    Button button = new Button(this); 
    button.setText(number); 
    button.setPadding(5, 0, 5, 0); 
    button.setTextSize(14f); 
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(WRAP_CONTENT, convertToPixel(40)); 
    layoutParams.setMargins(convertToPixel(10), convertToPixel(10), 0, 0); 

    button.setLayoutParams(layoutParams); 

    return button; 
} 

private int convertToPixel(int n) { 
    Resources r = getResources(); 
    float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, n, r.getDisplayMetrics()); 
    return (int) px; 
}