Android布局参数仅更改宽度和高度

use*_*404 8 android view params

我知道如何LayoutParams通过执行以下操作来设置视图的宽度和高度:

android.view.ViewGroup.LayoutParams params = button.getLayoutParams();
params.width = height/7;
params.height = height/10;
button.setLayoutParams(params);
Run Code Online (Sandbox Code Playgroud)

现在,只要我想将相同的高度和宽度应用到另一个按钮,我需要创建另一个LayoutParams或覆盖现有的一个,如下所示:

android.view.ViewGroup.LayoutParams params2 = but2.getLayoutParams();
params2.width = height/7;
params2.height = height/10;
but2.setLayoutParams(params2);
Run Code Online (Sandbox Code Playgroud)

我的应用程序中有大约50个按钮,我怀疑为了只改变宽度和高度而得到所有Params被认为是好的代码 - 我想保留剩余的参数(toLeftOf,[...]).

有没有办法只改变参数的宽度和高度,但保留其余的参数?所以它看起来像是这样的:

android.view.ViewGroup.LayoutParams params = button.getLayoutParams();
params.width = height/7;
params.height = height/10;
button.setLayoutParams(params);
button2.setLayoutParams(params);
button3.setLayoutParams(params);
butt[...]
Run Code Online (Sandbox Code Playgroud)

非常感谢提前.

Bar*_*ski 29

使用方法的整个目的getLayoutParams()是从一个View(保留所有规则和东西)中的现有的.然后,您可以修改这些参数的具体参数,LayoutParams并保持其余参数不被修改.因此,如果xml中的设置不同,则需要调用getLayoutParams()和修改返回的对象Views.如果他们在xml中使用完全相同的规则,你可以像在上一个例子中写的一样.

我建议你做的只是制作一个包装整个更新过程的方法LayoutParams.像这样:

private void setDimensions(View view, int width, int height){
    android.view.ViewGroup.LayoutParams params = view.getLayoutParams();
    params.width = width;
    params.height = height;
    view.setLayoutParams(params);
}
Run Code Online (Sandbox Code Playgroud)

这将显着简化您的代码,因为您可以为每个按钮调用此方法,并使用适当的宽度和高度值.

setDimensions(button, height/7, height/10);
setDimensions(button2, height/7, height/10);
setDimensions(button3, height/7, height/10);
Run Code Online (Sandbox Code Playgroud)


com*_*m1x 5

Kotlin中我们可以做得更短、更优雅:

view.layoutParams = view.layoutParams.apply {
    width = LayoutParams.MATCH_PARENT
    height = LayoutParams.WRAP_CONTENT
}
Run Code Online (Sandbox Code Playgroud)


M. *_*han 5

如果您只想更改一个参数:

view.getLayoutParams().width = 400;
view.requestLayout();
Run Code Online (Sandbox Code Playgroud)