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
而不是 textView
的 gravity
以使其显示在中间。
您在 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);
}
}
我使用的是在 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
而不是 textView
的 gravity
以使其显示在中间。
您在 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);
}
}