GridLayout 中的中心项目

Center item in GridLayout

我使用的是在 xml 中制作的网格布局,第一行有几个 headers。现在我想将带有动态项目的新行添加到网格中。 我的问题是这些项目没有在单元格中居中并且与 headers.

不匹配

这是 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>

这就是我尝试在第二个单元格的第二行中添加 TextView 的示例。

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

文本似乎在正确的单元格中,但它没有在标题正下方居中

这是 xml 版本,我首先尝试并完美运行,但我需要动态构建它

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

您需要设置 layout_gravity 而不是 textViewgravity 以使其显示在中间。

您在 xml 中设置 layout_gravity 这就是它起作用的原因,但动态您只设置 gravity.

Xml文件:

<?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代码

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);

 }
}