2016-02-10 1 views
0

J'ai un GridLayout simple qui contient deux textviews et deux editexts sur chaque ligne. Le Gui est comme ça gridLayout with 2 editexts and 2 textviewseditText ne remplit pas toute la colonne de gridLayout

Je veux que les deux editexts remplissent tout l'espace libre du gridLayout.

Le GridLayout et les editexts sont ajoutés programatically avec le code suivant:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

     ScrollView indexDefRootView = (ScrollView) rootView.findViewById(R.id.scrollViewContainer2); 

     GridLayout gridLayout = new GridLayout(getActivity()); 
     gridLayout.setColumnCount(4); 
     gridLayout.setRowCount(20); 
     int tmpIndex = 0; 
     // Drawable drawable = getResources().getDrawable(R.drawable.backtextcom); 

     for (int i = 1; i < 20; i++) { 

      if (true) { 

       TextView tv = new TextView(getActivity()); 
       tv.setPadding(60, 0, 10, 30); 
       Spec row = GridLayout.spec(tmpIndex); 
       Spec col = GridLayout.spec(0); 
       tv.setText("Left Text " +(i-1)); 
       GridLayout.LayoutParams first = new GridLayout.LayoutParams(row, col); 
       gridLayout.addView(tv, first); 

       EditText editText1 = new EditText(getActivity()); 
       //editText1.setBackground(drawable); 
       editText1.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12); 

       GridLayout.LayoutParams param = new GridLayout.LayoutParams(); 
       param.height = ViewGroup.LayoutParams.WRAP_CONTENT; 
       param.width = GridLayout.LayoutParams.WRAP_CONTENT; 
       param.rowSpec = GridLayout.spec(tmpIndex); 
       param.columnSpec = GridLayout.spec(1); 
       editText1.setLayoutParams(param);    
       gridLayout.addView(editText1); 

       TextView tv1 = new TextView(getActivity()); 
       tv1.setText("Right Text View "+i); 
       tv1.setPadding(60, 0, 10, 30); 

       row = GridLayout.spec(tmpIndex); 
       col = GridLayout.spec(2); 
       first = new GridLayout.LayoutParams(row, col); 
       gridLayout.addView(tv1, first); 

       EditText editText2 = new EditText(getActivity()); 
       //editText2.setBackground(drawable); 
       editText2.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12); 
       param = new GridLayout.LayoutParams();    
       param.height = ViewGroup.LayoutParams.WRAP_CONTENT; 
       param.width = GridLayout.LayoutParams.WRAP_CONTENT; 
       param.rowSpec = GridLayout.spec(tmpIndex); 
       param.columnSpec = GridLayout.spec(3); 
       editText2.setLayoutParams(param);    
       gridLayout.addView(editText2);   
       tmpIndex++; 
       i=i+2; 
      } 
     } 

     indexDefRootView.addView(gridLayout); 

     return rootView; 
    } 

Tous les commentaires seront appréciés.

Répondre

2

Essayez ces derniers dans votre code Modifier largeur match_parent dans votre code

param.width = GridLayout.LayoutParams.MATCH_PARENT;

L'utilisation de XML est le meilleur moyen. Évitez de créer une vue à moins d'être obligé

+0

Je dois faire ce programme parce que je ne sais pas maintenant beaucoup de lignes auront la disposition de la grille. Une ligne peut également comporter 2 ou 4 colonnes. J'ai mis à jour le code comme vous me suggérez 'param.width = GridLayout.LayoutParams.MATCH_PARENT;' et maintenant le premier editext remplit tout l'espace pour qu'il soit correct. Voir cette image [link] (http://snag.gy/OQmD4.jpg) – aurelianr

+0

Essayez de transmettre l'attribut WEIGHT dans le champ setLayoutParams ou essayez d'utiliser l'attribut ems – Naresh

+0

Je ne sais pas comment utiliser ems dans textview. Montre-moi un exemple s'il te plaît. – aurelianr