2010-06-03 29 views
65

Tôi muốn đặt LayoutParams cho số ImageView nhưng dường như không thể tìm ra cách thích hợp để thực hiện.Làm thế nào để bạn setLayoutParams() cho một ImageView?

Tôi chỉ có thể tìm tài liệu trong API cho ViewGroups khác nhau, nhưng không phải là ImageView. Tuy nhiên, ImageView dường như có chức năng này.

Mã này không làm việc ...

myImageView.setLayoutParams(new ImageView.LayoutParams(30,30)); 

Làm thế nào để làm điều đó?

Trả lời

147

Bạn cần phải đặt LayoutParams của ViewGroup các ImageView đang ngồi trong. Ví dụ, nếu ImageView của bạn là bên trong một LinearLayout, sau đó bạn tạo một

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30); 
yourImageView.setLayoutParams(layoutParams); 

Đây là bởi vì đó là mẹ của Xem mà cần biết kích thước để phân bổ cho Chế độ xem.

+2

Bạn biết đấy ... những gì bạn nói đã làm việc. Nhưng tôi đã nắm được khái niệm đó nhưng đã phạm một sai lầm lớn. Bạn thấy tôi đã có ImageViews của tôi trong một TableLayout ... vì vậy tôi đã sử dụng TableLayout.setLayoutParams. Nhưng nó sẽ sụp đổ. Khi tôi nghĩ sâu hơn về nó, tôi cần phải đi sâu vào TableRow.setLayoutParams để nó hoạt động. Cảm ơn vì đã làm cho bộ não của tôi hoạt động. 'đang ngồi trong' kích hoạt nó cho tôi ... phải câm công cụ này xuống. – DeadTime

+20

Tôi rất vui vì tôi có thể giúp đỡ. Nếu vấn đề của bạn được giải quyết, bạn có thể đánh dấu câu trả lời này là câu trả lời được chấp nhận không? Đó là dấu tick ở bên trái của văn bản. –

+0

Xin chào @SteveHaley, thông số chiều rộng và chiều cao ở đây có ở pixel phải không? Kinh nghiệm của tôi cho thấy điều đó và nó vô cùng trống rỗng ở đây: http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html#LinearLayout.LayoutParams(int, int) – ericn

14

Chủ đề cũ nhưng hiện tôi đã gặp sự cố tương tự. Nếu có ai đó gặp vấn đề này, anh ta có thể sẽ tìm thấy câu trả lời này:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30); 
yourImageView.setLayoutParams(layoutParams); 

Điều này sẽ chỉ hoạt động nếu bạn thêm ImageView làm subView vào LinearLayout. Nếu bạn thêm nó vào một RelativeLayout bạn sẽ cần phải gọi:

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(30, 30); 
yourImageView.setLayoutParams(layoutParams); 
4

Nếu bạn đang thay đổi cách bố trí của một ImageView hiện tại, bạn sẽ có thể chỉ đơn giản là có được LayoutParams hiện tại, thay đổi chiều rộng/chiều cao, và đặt lại:

android.view.ViewGroup.LayoutParams layoutParams = myImageView.getLayoutParams(); 
layoutParams.width = 30; 
layoutParams.height = 30; 
myImageView.setLayoutParams(layoutParams); 

Tôi không biết đó có phải là mục tiêu của bạn hay không, nhưng nếu có, đây có lẽ là giải pháp dễ nhất.

6

Một ImageView được setLayoutParams từ Chế độ xem sử dụng ViewGroup.LayoutParams. Nếu bạn sử dụng nó, nó sẽ sụp đổ trong hầu hết các trường hợp, do đó bạn nên sử dụng hàm getLayoutParams() trong View.class. Điều này sẽ kế thừa Chế độ xem gốc của ImageView và sẽ luôn hoạt động. Bạn có thể xác nhận điều này ở đây: ImageView extends view

Giả sử bạn có một ImageView định nghĩa là 'image_view' và int width/height định nghĩa là 'thumb_size'

Cách tốt nhất để làm điều này:

ViewGroup.LayoutParams iv_params_b = image_view.getLayoutParams(); 
iv_params_b.height = thumb_size; 
iv_params_b.width = thumb_size; 
image_view.setLayoutParams(iv_params_b); 
Các vấn đề liên quan