รับขอบของมุมมอง


95

ฉันจะรับมูลค่าขอบของมุมมองจากกิจกรรมได้อย่างไร มุมมองสามารถเป็นประเภทใดก็ได้

หลังจากค้นหาอยู่สักพักฉันก็พบวิธีในการเพิ่มมุมมอง แต่ไม่พบอะไรเลยใน Margin ใครสามารถช่วย?

ฉันลองอะไรแบบนี้

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

ใช้งานได้ แต่ในโค้ดด้านบนฉันได้สันนิษฐานว่ามุมมองเป็นไฟล์LinearLayout. แต่ฉันต้องได้รับmarginแอตทริบิวต์แม้ว่าฉันจะไม่รู้ประเภทมุมมองก็ตาม

คำตอบ:


180

ลองสิ่งนี้:

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

สามารถเข้าถึงระยะขอบได้ทาง

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

แก้ไข: อาจViewGroup.MarginLayoutParamsจะเหมาะกับคุณ LayoutParamsมันเป็นชั้นฐานอื่น ๆ

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

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


7
อันที่จริงผมคาดหวังว่าบางสิ่งบางอย่างเช่นนี้ LayoutParamsแต่ฉันไม่คิดว่าจะมีระดับโดยตรงเรียกว่า มีชั้นเรียนเหมือนFrameLayout.LayoutParams, RelativeLayout.LayoutParamsแต่ไม่มีอะไรเหมือนLayoutParamsในตัวเอง และเนื่องจากฉันไม่รู้ประเภทของมุมมองฉันจึงไม่สามารถใช้คลาสเดิมใด ๆ ได้
Arnab Chakraborty

5
สิ่งที่เกี่ยวกับViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();แล้ว?
Vladimir

ควรเป็น ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams ();
rockhammer


4

ตอนนี้ใช้รหัสที่แก้ไขนี้ สิ่งนี้จะช่วยคุณได้

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

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

วิธีการที่คุณกล่าวถึงให้ตำแหน่งซ้ายขวาบนและล่างของมุมมองฉันต้องการระยะขอบ
Arnab Chakraborty

ไม่จำเป็น. มุมมองอาจอยู่ในแนวที่LinearLayoutมีhorizontalการวางแนว ถ้ามันเป็นมุมมองที่สองในเค้าโครงview.getLeft()เมธอดจะทำให้ฉันได้พิกัดทางด้านซ้าย แต่ขอบด้านซ้ายของมุมมองจากมุมมองที่อยู่ติดกัน
Arnab Chakraborty

จะเกิดอะไรขึ้นถ้ามุมมองเป็นLinearLayout?
Arnab Chakraborty

3

ตามที่คนอื่นแนะนำ layout_margin # คือช่องว่างระหว่างขอบ # ของผู้ปกครองและมุมมองของคุณ

  • # แทนที่ "ซ้าย" "ขวา" "บน" หรือ "ล่าง"

การรับ / การตั้งค่าระยะขอบใช้ได้ผลสำหรับฉันด้วย:

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

แน่นอนว่า View ของฉันเป็น ViewGroup และผู้ปกครองก็เป็น ViewGroup เช่นกัน ในกรณีส่วนใหญ่คุณควรส่งพารามิเตอร์เลย์เอาต์ของคุณไปยัง LayoutParams คลาส View ของผู้ปกครอง (ในกรณีนี้คือ ViewGroup และ RelativeLayout)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.