Kod aracılığıyla TextView için wrap_content genişliğini ayarlama


92

Herkes yardım beni nasıl genişliğini ayarlamak için Can TextViewiçin wrap_contentkod üzerinden değil XML?

Dinamik olarak bir TextViewkod içi oluşturuyorum , bu nedenle genişliğini wrap_contentkoda göre nasıl ayarlayacağım ?

Yanıtlar:


127
TextView pf = new TextView(context);
pf.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

ConstraintLayoutVe diğerleri gibi farklı düzenler için, kendi LayoutParamsgibi kendi düzenleri vardır :

pf.setLayoutParams(new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

veya

parentView.addView(pf, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

8
android.view.ViewGroup$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
Francisco Corrales Morales

ana fark, ilk kodda zaten bu ayarlarla yeni bir TextView oluşturuyor olmamızdır. İkincisinde, mevcut bir görünüme ekliyoruz ve bu parametreleri de ayarlıyoruz. Oyuncu kadrosu sorunu için, uygun sınıfı seçmeniz gerektiğini düşünüyorum
Franco

78

Aynı sonuca ulaşmanın başka bir yolu var. Yalnızca bir parametre ayarlamanız gerekirse, örneğin 'yükseklik':

TextView textView = (TextView)findViewById(R.id.text_view);
ViewGroup.LayoutParams params = textView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
textView.setLayoutParams(params);

Bu harika çalışıyor. Bu yapılırsa gerekli LinearLayoutgörünmüyor ll.invalidate(). Neden?
midiwriter

1
Sanırım asla bilemeyeceğiz
Denny

49

İçeriği sarmak için TextViewgenişliği değiştirme çözümü .

textView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT; 
textView.requestLayout();  
// Call requestLayout() for redraw your TextView when your TextView is already drawn (laid out) (eg: you update TextView width when click a Button). 
// If your TextView is drawing you may not need requestLayout() (eg: you change TextView width inside onCreate()). However if you call it, it still working well => for easy: always use requestLayout()

// Another useful example
// textView.getLayoutParams().width = 200; // For change `TextView` width to 200 pixel

6
Basit ve doğru çözüm, çünkü diğer parametreleri geçersiz kılmaz.
CoolMind

2
Bu çok daha basit olduğu için yanıtımı silmek için işaretledim.
FrankKrumnow

2
Bu en iyi çözüm
pedram shabani

4

Android Java temel çok satırlı edittext gönderiyorum.

EditText editText = findViewById(R.id.editText);/* edittext access */

ViewGroup.LayoutParams params  =  editText.getLayoutParams(); 
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
editText.setLayoutParams(params); /* Gives as much height for multi line*/

editText.setSingleLine(false); /* Makes it Multi line */

1

Sanırım bu kod sorunuzu yanıtlıyor

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) 
holder.desc1.getLayoutParams();
params.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
holder.desc1.setLayoutParams(params);

0

Bu gönderi hakkında küçük bir güncelleme: Android projenizde ktx kullanıyorsanız, LayoutParams'i çok daha kolay güncellemenizi sağlayan küçük bir yardımcı yöntem var.

Örneğin sadece genişliği güncellemek istiyorsanız, bunu Kotlin'deki aşağıdaki satır ile yapabilirsiniz.

tv.updateLayoutParams { width = WRAP_CONTENT }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.