2016-03-10 1 views
3

J'essaie de créer dynamiquement une table avec 2 lignes et 4 colonnes. Mais la taille des lignes et des colonnes dans chaque cas ne devrait pas être la même. Peut-être que je vais joindre une photo:Comment utiliser GridLayout.Spec pour une colonne qui s'étend sur plusieurs lignes?

Je voudrais:

enter image description here

Si je comprends bien, quand je ne pas utiliser des balises XML pour y parvenir en utilisant un GridLayout.Spec dans setLayoutParams

Mais je ne comprends pas quels paramètres je dois passer dans GridLayout.Spec?

Si je veux fusionner la première colonne de la première ligne avec la première colonne de la deuxième ligne, que dois-je préciser dans

GridLayout.LayoutParams (GridLayout.Spec rowSpec, GridLayout.Spec columnSpec) 

?

et quoi est Spec? J'ai vu les exemples there et there mais je ne comprends pas complètement comment cela fonctionne.

Si dans le cas d'un balisage XML, je peux utiliser layout_rowSpan et layout_columnSpan pour fusionner des lignes ou des colonnes, puis comment le faire dynamiquement?

Répondre

2

Jetez un oeil à ce code ci-dessous pour obtenir la mise en page que vous recherchez. Des commentaires sont ajoutés pour expliquer les valeurs utilisées dans la création GridLayout.Spec.

// simple grid layout with WRAP_CONTENT width and height 
GridLayout gridLayout = (GridLayout) findViewById(R.id.grid_layout); 

// face view takes 2 rows, 1 column -- zero index based 
GridLayout.Spec faceRow = GridLayout.spec(0, 2); // starts row 0, takes 2 rows 
GridLayout.Spec faceCol = GridLayout.spec(0); // starts col 0, takes 1 col 

GridLayout.Spec titleRow = GridLayout.spec(0); // starts row 0, takes 1 row 
GridLayout.Spec titleCol = GridLayout.spec(1, 3); // starts col 1, takes 3 cols 

GridLayout.Spec plusRow = GridLayout.spec(1); // starts row 1, takes 1 row 
GridLayout.Spec plusCol = GridLayout.spec(1); // starts col 1, takes 1 col 

GridLayout.Spec minusRow = GridLayout.spec(1); // starts row 1, takes 1 row 
GridLayout.Spec minusCol = GridLayout.spec(2); // starts col 1, takes 1 col 

GridLayout.Spec checkRow = GridLayout.spec(1); // starts row 1, takes 1 row 
GridLayout.Spec checkCol = GridLayout.spec(3); // starts col 1, takes 1 col 

// create the LayoutParams using our row/col for each view 
GridLayout.LayoutParams faceParams = new GridLayout.LayoutParams(faceRow, faceCol); 
faceParams.setGravity(Gravity.FILL_VERTICAL); // fill vertical so we take up the full 2 rows 
// dummy text views to fill some space 
TextView faceText = new TextView(this); 
faceText.setPadding(32, 32, 32, 32); // add some random padding to make the views bigger 
faceText.setLayoutParams(faceParams); 
faceText.setText("FACE"); 
faceText.setGravity(Gravity.CENTER); 
faceText.setBackgroundColor(Color.RED); 
gridLayout.addView(faceText, faceParams); 

GridLayout.LayoutParams titleParams = new GridLayout.LayoutParams(titleRow, titleCol); 
titleParams.setGravity(Gravity.FILL_HORIZONTAL); // fill horizontal so we take up the full 3 columns 
TextView titleText = new TextView(this); 
titleText.setPadding(32, 32, 32, 32); 
titleText.setLayoutParams(titleParams); 
titleText.setText("TITLE"); 
titleText.setGravity(Gravity.CENTER); 
titleText.setBackgroundColor(Color.BLUE); 
gridLayout.addView(titleText, titleParams); 

GridLayout.LayoutParams minusParams = new GridLayout.LayoutParams(minusRow, minusCol); 
TextView minusText = new TextView(this); 
minusText.setPadding(32, 32, 32, 32); 
minusText.setLayoutParams(minusParams); 
minusText.setText("MIN"); 
minusText.setGravity(Gravity.CENTER); 
minusText.setBackgroundColor(Color.YELLOW); 
gridLayout.addView(minusText, minusParams); 

GridLayout.LayoutParams plusParams = new GridLayout.LayoutParams(plusRow, plusCol); 
TextView plusText = new TextView(this); 
plusText.setPadding(32, 32, 32, 32); 
plusText.setLayoutParams(plusParams); 
plusText.setText("PLS"); 
plusText.setGravity(Gravity.CENTER); 
plusText.setBackgroundColor(Color.GREEN); 
gridLayout.addView(plusText, plusParams); 

GridLayout.LayoutParams checkParams = new GridLayout.LayoutParams(checkRow, checkCol); 
TextView checkText = new TextView(this); 
checkText.setPadding(32, 32, 32, 32); 
checkText.setLayoutParams(faceParams); 
checkText.setText("CHK"); 
checkText.setGravity(Gravity.CENTER); 
checkText.setBackgroundColor(Color.MAGENTA); 
gridLayout.addView(checkText, checkParams); 

Espérons que cela aide à la compréhension du GridLayout.Spec.

+0

Je vais prier Dieu que vous soyez allé travailler dans Google et que vous écrivez le guide du développeur. Maintenant, je comprends comment cela fonctionne! Je vous remercie. – MikaAll

+0

Pas de problème! Si cela répond à votre question, assurez-vous de la marquer comme la réponse acceptée :) –