Android中addView不能跟随父控件的宽高问题

参考网址:https://blog.csdn.net/weixin_33850890/article/details/91840858

 

错误写法:
View view =LayoutInflater.from(this).inflate(R.layout.item_contact, mContainer, false);
LinearLayout ly = findViewById(R.id.ly);
ly.addView(view);
//说明:如果ly的宽、高是match_parent时,发现在buildToolsVersion为29及以上时,显示出来的效果并没有填充父控件,而是view控件的适配wrap_content宽高
正确写法:
View view =LayoutInflater.from(this).inflate(R.layout.item_contact, mContainer, false);
LinearLayout ly = findViewById(R.id.ly);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.MATCH_PARENT);
ly.addView(view,params);
//说明:在addView时指定宽高的params

 

如果在 Android GridLayout 添加了子控件,但它们的宽度度都无法平均分配布局,则可能是因为您没有正确设置每个子控件的行和列的权重,或者您的子控件具有不同的宽度度。 在 GridLayout ,每个行和列都可以指定权重,以确定它们在布局所占的比例。如果您不设置行和列的权重,它们将默认为0,这可能导致子控件无法平均分配空间。确保为每个子控件设置正确的行和列权重可以帮助您实现平均分配布局的目标。 另外,如果您的子控件具有不同的宽度度,则可能需要使用 `GridLayout.LayoutParams` 的 `width` 和 `height` 属性为每个子控件设置确切的宽度度。例如,以下代码演示了如何创建一个包含四个正方形子控件的 GridLayout: ``` GridLayout gridLayout = findViewById(R.id.grid_layout); gridLayout.setColumnCount(2); gridLayout.setRowCount(2); for (int i = 0; i < 4; i++) { TextView textView = new TextView(this); textView.setText("Text " + (i+1)); GridLayout.LayoutParams params = new GridLayout.LayoutParams(); params.width = 0; params.height = 0; params.columnSpec = GridLayout.spec(i % 2, 1f); params.rowSpec = GridLayout.spec(i / 2, 1f); textView.setLayoutParams(params); gridLayout.addView(textView); } ``` 在此示例,`params.columnSpec` 和 `params.rowSpec` 用于设置行和列的权重,并将每个子控件放置在正确的行和列。`params.width` 和 `params.height` 属性被设置为0,以便每个子控件都会平均分配空间,并且每个子控件都具有相同的大小。 确保为每个子控件设置正确的行和列权重,并为每个子控件设置确切的宽度度可以帮助您实现平均分配布局的目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值