Đặt chiều rộng thành wrap_content cho TextView thông qua mã


91

Bất cứ ai có thể giúp tôi cách đặt chiều rộng của TextViewwrap_content mã đến thông qua mã và không từ XML?

Tôi đang tạo động một TextViewmã trong mã, vậy có cách nào để đặt chiều rộng của nó thành wrap_contentthông qua mã không?

Câu trả lời:


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

Đối với các bố cục khác nhau như ConstraintLayoutvà các bố cục khác, chúng có các bố cục riêng LayoutParams, như vậy:

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

hoặc là

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,

tốt, sự khác biệt chính là trong mã đầu tiên, chúng tôi đang tạo một TextView mới với cài đặt đó. Trong cách thứ hai, chúng tôi đang thêm vào một chế độ xem hiện có và chúng tôi cũng đang thiết lập các thông số đó. Đối với các vấn đề diễn viên, tôi nghĩ rằng bạn phải ép lớp thích hợp
Franco

77

Có một cách khác để đạt được kết quả tương tự. Trong trường hợp bạn chỉ cần đặt một tham số, ví dụ: 'height':

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

Điều này hoạt động tuyệt vời. Nếu điều này được thực hiện trên LinearLayoutnó có vẻ như không ll.invalidate()cần thiết. Tại sao?
midiwriter

1
Tôi đoán chúng ta sẽ không bao giờ biết
Denny

49

Giải pháp để thay đổi TextViewchiều rộng để bọc nội dung .

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
Giải pháp đơn giản và đúng đắn, vì nó không ghi đè các tham số khác.
CoolMind

2
Đã đánh dấu anwer của tôi để xóa vì việc này đơn giản hơn nhiều.
FrankKrumnow,

2
Đây là giải pháp tốt nhất
Pedram Shabani

4

Tôi đang đăng văn bản chỉnh sửa nhiều dòng cơ sở android 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

Tôi nghĩ mã này trả lời câu hỏi của bạn

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) 
holder.desc1.getLayoutParams();
params.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
holder.desc1.setLayoutParams(params);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.