Bagaimana saya bisa mengatur nilai untuk atribut layout_weightuntuk tombol di android secara dinamis dari kode java?
Bagaimana saya bisa mengatur nilai untuk atribut layout_weightuntuk tombol di android secara dinamis dari kode java?
Jawaban:
Anda dapat meneruskannya sebagai bagian dari LinearLayout.LayoutParamskonstruktor:
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT,
1.0f
);
YOUR_VIEW.setLayoutParams(param);
Parameter terakhir adalah bobot.
param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, (float) 1.0);
1fjika tidak ada tempat desimal
Relative
Gunakan 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, jawaban Erich lebih mudah!
FILL_PARENTtelah usang dan MATCH_PARENTharus digunakan sebagai gantinya.
MATCH_PARENTdapat digunakan sebagai pengganti FILL_PARENTbahkan pada perangkat yang lebih lama.
FILL_PARENTvs MATCH_PARENT.
Jika Anda sudah mendefinisikan tampilan dalam file tata letak (xml), hanya ingin mengubah bobot secara program, cara ini lebih baik
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)
mButton.getLayoutParams();
params.weight = 1.0f;
mButton.setLayoutParams(params);
baru a LayoutParams menimpa params lain yang didefinisikan dalam file xml Anda seperti margin, atau Anda perlu menentukan semuanya di LayoutParams.
Jika konstruktor dengan lebar, tinggi dan berat tidak berfungsi, coba gunakan konstruktor dengan lebar dan tinggi. Dan kemudian secara manual mengatur berat.
Dan jika Anda ingin lebar diatur sesuai dengan berat, atur lebar sebagai 0 pada konstruktor. Hal yang sama berlaku untuk ketinggian. Kode di bawah ini berfungsi untuk saya.
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);
Jika saya seseorang mencari jawaban, gunakan ini:
LinearLayout.LayoutParams lay = (LinearLayout.LayoutParams) myLayout.getLayoutParams();
lay.weight = 0.5;
Jika Anda menginisialisasi tata letak Anda dari file xml, ini akan jauh lebih nyaman daripada memberikan parameter tata letak baru untuk Tata Letak Linear.
layout_weightsudah ditata, Anda perlu menelepon View.requestLayout()untuk memperbarui.
Salah satu dari LinearLayout.LayoutParams dan TableLayout.LayoutParamsbekerja untuk saya, untuk tombol yang tepat TableRow.LayoutParams. Itu adalah:
TableRow.LayoutParams buttonParams = new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT, 1f);
Tentang menggunakan MATCH_PARENTatau WRAP_CONTENTmenjadi sama.
FILL_PARENTtelah usang dan MATCH_PARENTharus digunakan sebagai gantinya.
LayoutParamsorangtua langsung. Saya berasumsi Anda mengalami kerusakan saat mencoba menggunakan LinearLayout.LayoutParamstanpa orang tua LinearLayout.
Jika Anda sudah mendefinisikan tampilan dalam file layout (xml) dan hanya ingin mengubah bobotnya tata bahasa, maka membuat LayoutParams baru akan menimpa params lain yang ditentukan dalam file xml Anda.
Jadi pertama-tama Anda harus menggunakan "getLayoutParams" dan kemudian setLayoutParams
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mButton.getLayoutParams();
params.weight = 4f;
mButton.setLayoutParams(params);
Jika layoutparamssudah didefinisikan (dalam XML atau dinamis), Berikut ini adalah satu baris:
((LinearLayout.LayoutParams) mView.getLayoutParams()).weight = 1;
Menggunakan Kotlin Anda dapat melakukan sesuatu seperti:
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)
}
}