2017-07-19 14 views
0

Ich verwende ein Gridlayout, das in Xml mit ein paar Header in der ersten Zeile erstellt wird. Jetzt möchte ich neue Zeilen mit dynamischen Elementen zum Gitter hinzufügen. Mein Problem ist, dass die Elemente nicht in der Zelle zentriert sind und nicht mit den Headern übereinstimmen.Center-Element in GridLayout

Dies ist das Gitter in dem XML-

<GridLayout 
      android:id="@+id/newGrid" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:columnCount="5" 
      android:rowCount="4"> 
      <!-- Grid Header --> 
      <Space 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_columnWeight="1" 
       android:layout_gravity="center" 
       android:text="@string/cellNo" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_columnWeight="1" 
       android:layout_gravity="center" 
       android:text="@string/desity" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_columnWeight="1" 
       android:layout_gravity="center" 
       android:text="@string/voltage" /> 

      <android.support.v7.widget.AppCompatImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:src="@drawable/problemIcon" /> 

</GridLayout> 

Das ist zum Beispiel, wie ich versuche, eine Textview in der zweiten Reihe in der zweiten Zelle hinzuzufügen.

... 
    TextView cellnum = new TextView(getContext()); 
    cellnum.setGravity(Gravity.CENTER); 
    cellnum.setText("9"); 
    ... 
    gridLayout.addView(cellnum); 

Der Text scheint in der richtigen Zelle zu sein, aber es ist nicht direkt unter der Überschrift

Dies ist xml verison den ich frist versucht zentrierte und funktionierte perfekt, aber ich brauche es zu bauen dynamicaly

   <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:text="9" /> 

Antwort

2

Sie müssen layout_gravity anstelle von gravity von textView setzen, damit es in der Mitte erscheint.

Sie setzen layout_gravity in der xml, deshalb funktioniert es, aber Sie setzen nur gravity dynamisch.

Xml Datei:

<?xml version="1.0" encoding="utf-8"?> 
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/newGrid" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:columnCount="5" 
android:rowCount="4"> 
<!-- Grid Header --> 
<Space 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_columnWeight="1" 
    android:layout_gravity="center" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_columnWeight="1" 
    android:layout_gravity="center" 
    android:text="cell number" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_columnWeight="1" 
    android:layout_gravity="center" 
    android:text="destiny" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_columnWeight="1" 
    android:layout_gravity="center" 
    android:text="voltage" /> 

<android.support.v7.widget.AppCompatImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_columnWeight="1" 
    android:layout_gravity="center" /> 

Activity-Code

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    GridLayout gridLayout = (GridLayout) findViewById(R.id.newGrid); 

    //Adding new textView at row 1 column 0 
    TextView cellNum = new TextView(this); 
    cellNum.setText("9"); 
    gridLayout.addView(cellNum); 

    GridLayout.LayoutParams params = new GridLayout.LayoutParams(cellNum.getLayoutParams()); 
    params.setGravity(Gravity.CENTER); 
    cellNum.setLayoutParams(params); 

    //Adding new textView at row 1 column 1 
    TextView cellNum1 = new TextView(this); 
    cellNum1.setText("10"); 
    gridLayout.addView(cellNum1); 

    GridLayout.LayoutParams params1 = new GridLayout.LayoutParams(cellNum1.getLayoutParams()); 
    params1.setGravity(Gravity.CENTER); 
    cellNum1.setLayoutParams(params1); 

} 
} 
+0

LayoutParams.WRAP_CONTENT und LayoutParams.FILL_PARENT einen Import fehlt. Aber GridLayout.LayoutParams (...) wird nicht akzeptiert – WeSt

+0

funktioniert nicht, die Textansicht und sogar die Header verschwinden – WeSt

+0

Ich habe alle meinen Code gepostet, und es funktioniert auf meiner Seite. Bitte überprüfen Sie, ob Sie etwas falsch kopieren –