Làm cách nào tôi có thể thiết lập giá trị cho thuộc tính layout_weight
cho nút trong Android từ mã java?
Làm cách nào tôi có thể thiết lập giá trị cho thuộc tính layout_weight
cho nút trong Android từ mã java?
Câu trả lời:
Bạn có thể truyền nó vào như một phần của hàm LinearLayout.LayoutParams
tạo:
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT,
1.0f
);
YOUR_VIEW.setLayoutParams(param);
Tham số cuối cùng là trọng lượng.
param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, (float) 1.0);
1f
nếu không có vị trí thập phân
Relative
Sử dụng LinearLayout.LayoutParams
:
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
params.weight = 1.0f;
Button button = new Button(this);
button.setLayoutParams(params);
EDIT: Ah, câu trả lời của Erich dễ dàng hơn!
FILL_PARENT
đã được phản đối và MATCH_PARENT
nên được sử dụng thay thế.
MATCH_PARENT
có thể được sử dụng thay vì FILL_PARENT
ngay cả trên các thiết bị cũ hơn.
FILL_PARENT
vs MATCH_PARENT
.
Nếu bạn đã xác định chế độ xem trong tệp bố cục (xml) của mình, chỉ muốn thay đổi trọng số theo chương trình, cách này sẽ tốt hơn
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)
mButton.getLayoutParams();
params.weight = 1.0f;
mButton.setLayoutParams(params);
một LayoutParams mới ghi đè lên các thông số khác được xác định trong tệp xml của bạn như lề hoặc bạn cần chỉ định tất cả chúng trong LayoutParams.
Nếu hàm tạo có chiều rộng, chiều cao và trọng lượng không hoạt động, hãy thử sử dụng hàm tạo có chiều rộng và chiều cao. Và sau đó tự đặt trọng lượng.
Và nếu bạn muốn chiều rộng được đặt theo trọng số, hãy đặt chiều rộng là 0 trong hàm tạo. Áp dụng tương tự cho chiều cao. Mã dưới đây làm việc cho tôi.
LinearLayout.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);
Nếu tôi có ai đó đang tìm kiếm câu trả lời, hãy sử dụng điều này:
LinearLayout.LayoutParams lay = (LinearLayout.LayoutParams) myLayout.getLayoutParams();
lay.weight = 0.5;
Nếu bạn đang khởi tạo bố cục của mình từ tệp xml, điều này sẽ thuận tiện hơn nhiều so với việc cung cấp các tham số bố cục mới cho Bố cục tuyến tính.
layout_weight
đã được đặt ra, bạn cần gọi View.requestLayout()
để cập nhật.
Bất kỳ LinearLayout.LayoutParams
và TableLayout.LayoutParams
làm việc cho tôi, cho các nút bên phải là TableRow.LayoutParams
. Đó là:
TableRow.LayoutParams buttonParams = new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT, 1f);
Về việc sử dụng MATCH_PARENT
hoặc WRAP_CONTENT
là như nhau.
FILL_PARENT
đã được phản đối và MATCH_PARENT
nên được sử dụng thay thế.
LayoutParams
cha mẹ trực tiếp. Tôi giả sử bạn đã gặp sự cố khi cố gắng sử dụng LinearLayout.LayoutParams
mà không có cha mẹ LinearLayout
.
Nếu bạn đã xác định chế độ xem của mình trong tệp bố cục (xml) và chỉ muốn thay đổi trọng số theo ngữ pháp, thì sau đó tạo Bố cục mới sẽ ghi đè các tham số khác được xác định trong tệp xml của bạn.
Vì vậy, trước tiên bạn nên sử dụng "getLayoutParams" và sau đó đặtLayoutParams
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mButton.getLayoutParams();
params.weight = 4f;
mButton.setLayoutParams(params);
Nếu layoutparams
đã được xác định (bằng XML hoặc động), đây là một lớp lót:
((LinearLayout.LayoutParams) mView.getLayoutParams()).weight = 1;
Sử dụng Kotlin bạn có thể làm một cái gì đó như:
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)
}
}