Android:如何通过代码设置View/GridView的layout_height为0dp且layout_weight为1?
动态设置View高度为0dp并设置权重1的实现方案
嘿,这个需求我之前做项目时刚好碰到过,其实不管是GridView还是普通View,核心都是通过修改它们的布局参数(LayoutParams)来实现——毕竟XML里的android:layout_height="0dp"和android:layout_weight="1"本质上就是给View设置LinearLayout的布局属性,具体实现看下面:
一、给GridView设置的步骤
首先要确认你的GridView的父布局是LinearLayout(因为只有LinearLayout支持layout_weight属性),然后按以下代码操作:
// 先获取你的GridView实例 GridView myGridView = findViewById(R.id.grid_view_id); // 获取当前的布局参数,强转为LinearLayout.LayoutParams(因为父布局是LinearLayout) LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) myGridView.getLayoutParams(); // 设置高度为0dp(对应代码里的0) layoutParams.height = 0; // 设置权重为1 layoutParams.weight = 1; // 将修改后的参数重新赋值给GridView myGridView.setLayoutParams(layoutParams); // 可选:如果布局没有自动刷新,调用这个方法触发重绘 myGridView.requestLayout();
二、给普通View设置的方法
逻辑和GridView完全一致,不管是TextView、ImageView还是自定义View,只要父布局是LinearLayout,都可以用同样的方式:
// 获取目标View实例 View myNormalView = findViewById(R.id.normal_view_id); LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) myNormalView.getLayoutParams(); layoutParams.height = 0; layoutParams.weight = 1; myNormalView.setLayoutParams(layoutParams); myNormalView.requestLayout();
额外注意事项
- 如果你的View还没有被添加到父布局中,
getLayoutParams()会返回null,这时候需要手动创建布局参数:LinearLayout.LayoutParams newParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, // 宽度根据你的需求设置,比如WRAP_CONTENT 0, // 高度设为0dp 1.0f // 权重设为1 ); myNormalView.setLayoutParams(newParams); - 如果父布局是ConstraintLayout,那
layout_weight的实现逻辑不一样,需要用ConstraintLayout.LayoutParams的相关属性,但你问的是和XML里layout_weight对应的场景,所以默认是LinearLayout的情况。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

