Bagaimana saya bisa mengatur nilai untuk atribut layout_weight
untuk tombol di android secara dinamis dari kode java?
Bagaimana saya bisa mengatur nilai untuk atribut layout_weight
untuk tombol di android secara dinamis dari kode java?
Jawaban:
Anda dapat meneruskannya sebagai bagian dari LinearLayout.LayoutParams
konstruktor:
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);
1f
jika 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_PARENT
telah usang dan MATCH_PARENT
harus digunakan sebagai gantinya.
MATCH_PARENT
dapat digunakan sebagai pengganti FILL_PARENT
bahkan pada perangkat yang lebih lama.
FILL_PARENT
vs 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_weight
sudah ditata, Anda perlu menelepon View.requestLayout()
untuk memperbarui.
Salah satu dari LinearLayout.LayoutParams
dan TableLayout.LayoutParams
bekerja 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_PARENT
atau WRAP_CONTENT
menjadi sama.
FILL_PARENT
telah usang dan MATCH_PARENT
harus digunakan sebagai gantinya.
LayoutParams
orangtua langsung. Saya berasumsi Anda mengalami kerusakan saat mencoba menggunakan LinearLayout.LayoutParams
tanpa 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 layoutparams
sudah 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)
}
}