【问题标题】:Center item in GridLayoutGridLayout 中的中心项
【发布时间】:2017-07-19 08:48:52
【问题描述】:

我使用的是 Gridlayout,它是用 xml 制作的,第一行有几个标题。现在我想将带有动态项目的新行添加到网格中。 我的问题是项目不在单元格中居中并且与标题不匹配。

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

【问题讨论】:

    标签: android grid-layout gravity


    【解决方案1】:

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

    您在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);
    
     }
    }
    

    【讨论】:

    • LayoutParams.WRAP_CONTENT 和 LayoutParams.FILL_PARENT 缺少导入。但 GridLayout.LayoutParams(...) 不被接受
    • 不起作用,textview甚至标题都消失了
    • 我已经发布了我所有的代码,它对我有用。请检查您是否复制错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2023-03-06
    相关资源
    最近更新 更多