Menyetel lebar ke wrap_content untuk TextView melalui kode


92

Siapa pun dapat membantu saya bagaimana untuk mengatur lebar TextViewuntuk wrap_contentmelalui kode dan bukan dari XML?

Saya secara dinamis membuat TextViewkode in, jadi adakah cara untuk mengatur lebarnya wrap_contentmelalui kode?

Jawaban:


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

Untuk tata letak yang berbeda seperti ConstraintLayoutdan lainnya, mereka memiliki sendiri LayoutParams, seperti:

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

atau

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

Nah, perbedaan utamanya adalah di kode pertama kita membuat TextView baru dengan pengaturan itu. Yang kedua, kami menambahkan ke tampilan yang ada, dan juga kami mengatur parameter tersebut. Untuk masalah pemeran, saya pikir Anda harus memasukkan kelas yang tepat
Franco

78

Ada cara lain untuk mencapai hasil yang sama. Jika Anda hanya perlu menetapkan satu parameter, misalnya 'tinggi':

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

Ini bekerja dengan baik. Jika hal ini dilakukan LinearLayout, tampaknya tidak ll.invalidate()perlu. Mengapa?
midiwriter

1
Saya kira kita tidak akan pernah tahu
Denny

49

Solusi untuk mengubah TextViewlebar untuk membungkus konten .

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
Solusi sederhana dan tepat, karena tidak menimpa parameter lain.
CoolMind

2
Tandai jawaban saya untuk dihapus karena ini jauh lebih sederhana.
FrankKrumnow

2
Ini adalah solusi terbaik
pedram shabani

4

Saya memposting teks edittext multi baris android berbasis Java.

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

Saya pikir kode ini menjawab pertanyaan Anda

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

0

Sedikit pembaruan pada posting ini: jika Anda menggunakan ktx dalam proyek Android Anda, ada sedikit metode pembantu yang membuat pembaruan LayoutParams jauh lebih mudah.

Jika Anda ingin memperbarui, misalnya hanya lebarnya, Anda dapat melakukannya dengan baris berikut di Kotlin.

tv.updateLayoutParams { width = WRAP_CONTENT }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.