Nhận lợi nhuận của một Chế độ xem


95

Làm cách nào để nhận giá trị ký quỹ của Chế độ xem từ Hoạt động? Chế độ xem có thể thuộc bất kỳ loại nào.

Sau một hồi 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 Margin. Có ai giúp được không?

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

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

Điều này hoạt động, nhưng trong đoạn mã trên, tôi đã giả định chế độ xem là a LinearLayout. Nhưng tôi cần lấy marginthuộc tính ngay cả khi tôi không biết kiểu xem.

Câu trả lời:


180

thử cái này:

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

lợi nhuận có thể truy cập thông qua

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

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

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

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


7
Trên thực tế, tôi đã mong đợi một cái gì đó như thế này, nhưng tôi không nghĩ rằng có bất kỳ lớp học trực tiếp nào được gọi LayoutParams. Có các lớp học như FrameLayout.LayoutParams, RelativeLayout.LayoutParamsnhưng không giống như LayoutParamscủa riêng mình. Và vì tôi không biết kiểu xem, tôi không thể sử dụng bất kỳ lớp nào trong số các lớp cũ.
Arnab Chakraborty

5
những gì về ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();sau đó?
Vladimir

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


4

bây giờ sử dụng mã đã chỉnh sửa 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

Các phương pháp bạn đã đề cập cung 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ề.
Arnab Chakraborty

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

Nếu Chế độ xem là một LinearLayout?
Arnab Chakraborty

3

Như những người khác đã đề xuất, layout_margin # là khoảng trống giữa cạnh # của cha mẹ và chế độ xem của bạn.

  • # thay thế "Left", "Right", "Top" hoặc "Bottom"

Lấy / thiết lập lợi nhuận đã 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, Chế độ xem của tôi thực sự là một ViewGroup và mẹ cũng là một ViewGroup. Trong hầu hết các trường hợp, bạn nên truyền các tham số bố cục của mình đến LayoutParams của lớp View của cha mẹ (trong trường hợp này là ViewGroup và RelativeLayout)

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.