2011-09-19 48 views
72

Làm cách nào để có được giá trị lợi nhuận của Chế độ xem từ một Hoạt động? Chế độ xem có thể thuộc bất kỳ loại nào.Nhận biên độ của Chế độ xem

Sau một chút tìm kiếm, tôi đã tìm ra cách để có được phần đệm của một chế độ xem, nhưng không thể tìm thấy bất kỳ thứ gì trên Lề. Có ai giúp được không?

tôi đã cố gắng một cái gì đó như thế này,

ViewGroup.LayoutParams vlp = view.getLayoutParams(); 
int marginBottom = ((LinearLayout.LayoutParams) vlp).bottomMargin; 

này hoạt động, nhưng trong đoạn mã trên tôi đã giả định quan điểm là một LinearLayout. Nhưng tôi cần lấy thuộc tính margin ngay cả khi tôi không biết loại chế độ xem.

Trả lời

136

thử điều này:

View view = findViewById(...) //or however you need it 
LayoutParams lp = (LayoutParams) view.getLayoutParams(); 

lề có thể truy cập thông qua

lp.leftMargin; 
lp.rightMargin; 
lp.topMargin; 
lp.bottomMargin; 

chỉnh sửa: lẽ ViewGroup.MarginLayoutParams sẽ làm việc cho bạn. Đây là một lớp cơ sở cho LayoutParams khác.

ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); 

http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html

+5

Thực ra tôi đã mong đợi một cái gì đó như thế này, nhưng tôi không nghĩ có bất kỳ lớp trực tiếp nào gọi là LayoutParams '. Có các lớp như 'FrameLayout.LayoutParams',' RelativeLayout.LayoutParams', nhưng không có gì giống như 'LayoutParams' trong chính nó. Và vì tôi không biết kiểu xem, tôi không thể sử dụng bất kỳ lớp học nào trước đây. –

+4

điều gì về 'ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();' sau đó? – Vladimir

+0

Nên là ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); – rockhammer

4

nay sử dụng mã thay đổi nội dung này. điều này sẽ giúp bạn

FrameLayout.LayoutParams lp=(FrameLayout.LayoutParams)mainLayout.getLayoutParams(); 

lp.leftMargin // for left margin 
lp.rightMargin // for right margin 
+0

Các phương pháp bạn đã đề cập cho các vị trí bên trái, bên phải, trên và dưới của chế độ xem, tôi cần các lề. –

+0

lề theo nghĩa của nó từ trái sang phải bao lâu ... –

+0

Không nhất thiết. Một khung nhìn có thể được đặt trong một 'LinearLayout' với định hướng' horizontal'.Nếu chế độ xem thứ hai của nó trong bố cục, phương thức 'view.getLeft()' sẽ cho tôi tọa độ bên trái của nó nhưng lề trái của khung nhìn từ khung nhìn liền kề của nó. –

2

Như những người khác đề nghị, layout_margin # là khoảng cách giữa # mép phụ huynh và tầm nhìn của bạn.

  • # thay thế "Left", "Right", "Top" hoặc "Dưới"

Bắt/lề thiết lập làm việc cho tôi với:

ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mView.getLayoutParams(); 
params.topMargin += 20; 
mView.requestLayout(); 

Tất nhiên, quan điểm của tôi thực sự là một ViewGroup và cha mẹ cũng là một ViewGroup. Trong hầu hết các trường hợp, bạn nên đưa các tham số layout của bạn vào View class LayoutParams (trong trường hợp này là ViewGroup và RelativeLayout)

Các vấn đề liên quan