我如何从Java代码动态设置Android中按钮的layout_weight
属性值?
我如何从Java代码动态设置Android中按钮的layout_weight
属性值?
LinearLayout.LayoutParams
构造函数的一部分传递进去:LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT,
1.0f
);
YOUR_VIEW.setLayoutParams(param);
最后一个参数是权重。1f
。 - sandaloneLinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
params.weight = 1.0f;
Button button = new Button(this);
button.setLayoutParams(params);
编辑:啊,Erich的答案更简单!
FILL_PARENT
已被弃用,应使用MATCH_PARENT
代替。 - Simon ForsbergMATCH_PARENT
代替FILL_PARENT
。 - Kevin CoppockFILL_PARENT
和MATCH_PARENT
之前,您可能会遇到许多其他问题。 - Simon ForsbergLinearLayout.LayoutParams params = (LinearLayout.LayoutParams)
mButton.getLayoutParams();
params.weight = 1.0f;
mButton.setLayoutParams(params);
新建一个LayoutParams会覆盖在xml文件中定义的其他参数,例如边距,或者你需要在LayoutParams中指定所有这些参数。
mButton.requestLayout()
而不是 setLayoutParams
,因为你只是改变了一个值。setLayoutParams
在内部调用了 requestLayout
。 - JohnnyLambadaLinearLayout.LayoutParams childParam1 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT);
childParam1.weight = 0.3f;
child1.setLayoutParams(childParam1);
LinearLayout.LayoutParams childParam2 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT);
childParam2.weight = 0.7f;
child2.setLayoutParams(childParam2);
parent.setWeightSum(1f);
parent.addView(child1);
parent.addView(child2);
layoutparams
已经在XML或动态定义中定义,则有一个一行代码解决方案:
Here's a one liner:
((LinearLayout.LayoutParams) mView.getLayoutParams()).weight = 1;
如果有人正在寻找答案,请使用这个:
LinearLayout.LayoutParams lay = (LinearLayout.LayoutParams) myLayout.getLayoutParams();
lay.weight = 0.5;
如果你是从xml文件初始化你的布局,那么这比为线性布局提供新的布局参数要方便得多。
layout_weight
的视图已经被布局,您需要调用View.requestLayout()
来更新。 - AttacktiveLinearLayout.LayoutParams
和 TableLayout.LayoutParams
两者都可以使用,对于按钮来说正确的是 TableRow.LayoutParams
。即:
TableRow.LayoutParams buttonParams = new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT, 1f);
使用MATCH_PARENT
或WRAP_CONTENT
是相同的。
FILL_PARENT
已经被弃用,应该使用MATCH_PARENT
代替。 - Simon ForsbergLayoutParams
。我猜测你试图在没有父级布局 LinearLayout
的情况下使用了 LinearLayout.LayoutParams
,因此导致了程序崩溃。 - Abandoned CartLinearLayout.LayoutParams mylayout = (LinearLayout.LayoutParams)
myview.getLayoutParams();
mylayout.weight = 2;
myview.setLayoutParams(mylayout);
使用 Kotlin,您可以做类似于以下操作:
import android.content.Context
import android.support.v4.content.ContextCompat
import android.support.v7.widget.CardView
import android.widget.*
import android.widget.LinearLayout
class RespondTo : CardView {
constructor(context: Context) : super(context) {
init(context)
}
private fun init(context: Context) {
val parent = LinearLayout(context)
parent.apply {
layoutParams = LinearLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT, 1.0f).apply {
orientation = LinearLayout.HORIZONTAL
addView(EditText(context).apply {
id = generateViewId()
layoutParams = LinearLayout.LayoutParams(0,
LinearLayout.LayoutParams.WRAP_CONTENT, 0.9f).apply {
}
})
addView(ImageButton(context).apply({
layoutParams = LinearLayout.LayoutParams(0,
LinearLayout.LayoutParams.WRAP_CONTENT, 0.1f)
background = null
setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_save_black_24px))
id = generateViewId()
layoutParams = RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT).apply {
addRule(RelativeLayout.ALIGN_PARENT_RIGHT)
// addRule(RelativeLayout.LEFT_OF, myImageButton.id)
}
}))
}
}
this.addView(parent)
}
}