GridLayout中的中心项

时间:2017-07-19 08:48:53

标签: android grid-layout gravity

我正在使用一个在xml中创建的Gridlayout,第一行有几个标题。现在我想添加具有动态项目的新行。 我的问题是项目不在单元格的中心,与标题不匹配。

这是xml中的Grid

<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 verison,我尝试了frist并且工作完美,但我需要动态构建它

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

1 个答案:

答案 0 :(得分:3)

您需要设置layout_gravity而不是gravity textView才能使其显示在中心位置。

您在layout_gravity中设置了xml,这就是它的工作原理,但动态的是您只设置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);

 }
}