Làm cách nào tôi có thể thiết lập giá trị cho thuộc tính layout_weightcho 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_weightcho 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.LayoutParamstạ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);
1fnế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_PARENTnên được sử dụng thay thế.
MATCH_PARENTcó thể được sử dụng thay vì FILL_PARENTngay cả trên các thiết bị cũ hơn.
FILL_PARENTvs 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.LayoutParamsvà TableLayout.LayoutParamslà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_PARENThoặc WRAP_CONTENTlà như nhau.
FILL_PARENTđã được phản đối và MATCH_PARENTnên được sử dụng thay thế.
LayoutParamscha mẹ trực tiếp. Tôi giả sử bạn đã gặp sự cố khi cố gắng sử dụng LinearLayout.LayoutParamsmà 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)
}
}