layout_weightJava kodundan androidde düğme özelliğinin değerini nasıl dinamik olarak ayarlayabilirim ?
layout_weightJava kodundan androidde düğme özelliğinin değerini nasıl dinamik olarak ayarlayabilirim ?
Yanıtlar:
LinearLayout.LayoutParamsYapıcı bir parçası olarak geçirebilirsiniz :
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT,
1.0f
);
YOUR_VIEW.setLayoutParams(param);
Son parametre ağırlıktır.
param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, (float) 1.0);
1fondalık basamak yoksa daha basit ifade
Relative
Kullanım 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, Erich'ın cevabı daha kolay!
FILL_PARENTkullanımdan kaldırılmıştır ve MATCH_PARENTbunun yerine kullanılmalıdır.
MATCH_PARENTkullanılabilir FILL_PARENT.
FILL_PARENTvs. ile ilgili endişelenmeden önce büyük olasılıkla bir sürü başka sorunla karşılaşırsınız MATCH_PARENT.
Görünümünüzü düzen (xml) dosyanızda zaten tanımladıysanız, yalnızca ağırlığı programlı olarak değiştirmek istiyorsanız, bu şekilde daha iyidir
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)
mButton.getLayoutParams();
params.weight = 1.0f;
mButton.setLayoutParams(params);
yeni bir LayoutParams, kenar boşlukları gibi xml dosyanızda tanımlanan diğer parametrelerin üzerine yazar veya tümünü LayoutParams'ta belirtmeniz gerekir.
Genişlik, yükseklik ve ağırlıktaki kurucu çalışmıyorsa, genişlik ve yükseklikteki kurucuyu kullanmayı deneyin. Ve sonra ağırlığı manuel olarak ayarlayın.
Genişliğin ağırlığa göre ayarlanmasını istiyorsanız, yapıcıda genişliği 0 olarak ayarlayın. Aynı şey yükseklik için de geçerlidir. Aşağıdaki kod benim için çalışıyor.
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);
Birisi cevap arıyorsanız, bunu kullanın:
LinearLayout.LayoutParams lay = (LinearLayout.LayoutParams) myLayout.getLayoutParams();
lay.weight = 0.5;
Düzeninizi xml dosyasından başlatıyorsanız, bu, Doğrusal Düzen için yeni düzen parametreleri sağlamaktan çok daha uygun olacaktır.
layout_weightönceden düzenlenmişse, View.requestLayout()güncellemek için arama yapmanız gerekir .
Herhangi biri LinearLayout.LayoutParamsve TableLayout.LayoutParamsbenim için çalıştı, düğmeler için doğru olanı TableRow.LayoutParams. Yani:
TableRow.LayoutParams buttonParams = new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT, 1f);
Kullanma MATCH_PARENTya WRAP_CONTENTda aynı olma hakkında.
FILL_PARENTkullanımdan kaldırılmıştır ve MATCH_PARENTbunun yerine kullanılmalıdır.
LayoutParamsDoğrudan ebeveynin adını çağırırsınız . LinearLayout.LayoutParamsEbeveyn olmadan kullanmaya çalışan bir kilitlenme olduğunu varsayıyorum LinearLayout.
Eğer varsa zaten düzen (xml) dosyasında görünümünüzü tanımlanmış ve sadece ağırlığını değiştirmek istediğiniz sonra o zaman xml dosyasında tanımlanan yeni LayoutParams üzerinde yazma diğer params oluşturarak, dilbilgisi pro.
Yani önce "getLayoutParams" kullanmalı ve sonra setLayoutParams
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mButton.getLayoutParams();
params.weight = 4f;
mButton.setLayoutParams(params);
Eğer layoutparamszaten (XML veya dinamik olarak) tanımlanır, burada bir astar var:
((LinearLayout.LayoutParams) mView.getLayoutParams()).weight = 1;
Kotlin'i kullanarak aşağıdakileri yapabilirsiniz:
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)
}
}