如何在Android中以编程方式设置GridLayout内按钮的布局参数
Android GridLayout动态设置按钮布局参数方案
完整实现代码
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Context context = this; GridLayout gridBoutons = findViewById(R.id.layout_gridBoutons); // 把5dp转换为px,适配不同屏幕密度 int marginPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getResources().getDisplayMetrics()); for(int i = 0; i < 9;i++){ Bouton bouton = new Bouton(context); // 可根据需求替换为对应的字符串资源 bouton.setText(getString(R.string.button1) + (i+1)); // 计算当前按钮所处的行、列索引(3行3列布局) int rowIndex = i / 3; int columnIndex = i % 3; // 定义行规则:行索引、行跨度、行权重 GridLayout.Spec rowSpec = GridLayout.spec(rowIndex, 1, 1f); // 定义列规则:列索引、列跨度、列权重 GridLayout.Spec columnSpec = GridLayout.spec(columnIndex, 1, 1f); // 构造布局参数 GridLayout.LayoutParams param = new GridLayout.LayoutParams(rowSpec, columnSpec); param.height = GridLayout.LayoutParams.WRAP_CONTENT; param.width = GridLayout.LayoutParams.WRAP_CONTENT; // 设置边距 param.setMargins(marginPx, marginPx, marginPx, marginPx); bouton.setLayoutParams(param); gridBoutons.addView(bouton); } }
XML属性和代码参数对应关系
| XML属性 | 代码设置方式 |
|---|---|
android:layout_rowSpan | GridLayout.spec()的第二个参数,传入跨度数值 |
android:layout_columnSpan | GridLayout.spec()的第二个参数,传入跨度数值 |
android:layout_rowWeight | GridLayout.spec()的第三个参数,传入float类型权重值,也可直接赋值param.rowWeight = 1f |
android:layout_columnWeight | GridLayout.spec()的第三个参数,传入float类型权重值,也可直接赋值param.columnWeight = 1f |
android:layout_margin | 调用param.setMargins()方法,注意传入的数值单位为px,需要提前把dp转换为px避免适配问题 |
注意事项
如果使用原生android.widget.GridLayout,columnWeight和rowWeight仅支持API 21及以上版本。如果需要兼容更低系统版本,建议替换为AndroidX库的androidx.gridlayout.widget.GridLayout。
内容的提问来源于stack exchange,提问作者yoan_gauthier
相关产品推荐
相关产品推荐

