Câu hỏi Nhận lợi nhuận của Chế độ xem


Làm cách nào tôi có thể nhận đượ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.

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 khung nhìn, nhưng không thể tìm thấy bất cứ điều 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 có tác dụng, nhưng trong đoạn mã trên tôi đã giả định rằng khung nhìn là LinearLayout. Nhưng tôi cần lấy margin thuộc tính ngay cả khi tôi không biết loại chế độ xem.


76
2017-09-19 07:55


gốc




Các câu trả lời:


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.MarginLayoutParams sẽ làm việc cho bạn. Đó là một lớp cơ sở cho người khác LayoutParams.

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

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


148
2017-09-19 08:09



Thực ra 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 gọi là LayoutParams. Có những lớp như FrameLayout.LayoutParams, RelativeLayout.LayoutParams, nhưng không có gì giống 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. - Arnab Chakraborty
Thế còn ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); sau đó? - Vladimir
Nên là ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams (); - rockhammer


Thử

ViewGroup.MarginLayoutParams vlp = (MarginLayoutParams) view.getLayoutParams()

vlp.rightMargin
vlp.bottomMargin
vlp.leftMargin
vlp.topMargin

Điều này trả về các lề chính xác cho quan điểm của tôi ít nhất.

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


25
2017-10-28 09:42





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

4
2017-09-19 08:26



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ề. - Arnab Chakraborty
lề theo nghĩa của nó từ trái sang phải bao lâu ... - ilango j
Không cần thiết. Chế độ xem có thể được đặt trong LinearLayout với horizontal sự định hướng. Nếu chế độ xem thứ hai trong bố cục view.getLeft() phương pháp này 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ó. - Arnab Chakraborty
bây giờ tôi đã chỉnh sửa câu trả lời của tôi. Điều này sẽ giúp bạn. - ilango j
Điều gì xảy ra nếu Chế độ xem là một LinearLayout? - Arnab Chakraborty


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

  • # thay thế "Trái", "Phải", "Trên cùng" hoặc "Dưới cùng"

Bắt / thiết lập lề 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, View 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 lớp View của LayoutParams (trong trường hợp này là ViewGroup và RelativeLayout)


2
2018-05-05 12:11