layout_weight
Java kodundan androidde düğme özelliğinin değerini nasıl dinamik olarak ayarlayabilirim ?
layout_weight
Java kodundan androidde düğme özelliğinin değerini nasıl dinamik olarak ayarlayabilirim ?
Yanıtlar:
LinearLayout.LayoutParams
Yapı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);
1f
ondalı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_PARENT
kullanımdan kaldırılmıştır ve MATCH_PARENT
bunun yerine kullanılmalıdır.
MATCH_PARENT
kullanılabilir FILL_PARENT
.
FILL_PARENT
vs. 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.LayoutParams
ve TableLayout.LayoutParams
benim 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_PARENT
ya WRAP_CONTENT
da aynı olma hakkında.
FILL_PARENT
kullanımdan kaldırılmıştır ve MATCH_PARENT
bunun yerine kullanılmalıdır.
LayoutParams
Doğrudan ebeveynin adını çağırırsınız . LinearLayout.LayoutParams
Ebeveyn 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 layoutparams
zaten (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)
}
}