FrameLayout ทำอะไร?


97

ฉันเพิ่งเริ่มเขียนโปรแกรม ฉันใช้เค้าโครงกราฟิกตอนนั้นฉันกำลังอ่านไฟล์ xml ฉันเห็น FrameLayout จากนั้นฉันก็ค้นหา แต่ไม่พบสิ่งที่เป็นประโยชน์ FrameLayout คืออะไรและทำอะไร?


1
คุณเคยผ่านที่นี่หรือไม่? developer.android.com/reference/android/widget/FrameLayout.html
Ed_Fernando

12
ใช่ฉันเคยไปที่นั่น แต่ไม่พบสิ่งที่เข้าใจได้
Amin Ghasemi

คำตอบ:


196

คุณใช้ FrameLayout เพื่อซ้อนมุมมองชายน์ซ้อนกันโดยมีลูกล่าสุดอยู่ด้านบนของสแต็ก ในตัวอย่างด้านล่าง TextView เป็นเวอร์ชันล่าสุดดังนั้นจึงวางไว้ที่ด้านบนของ ImageView โดยอัตโนมัติ

ตัวอย่างเช่น:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/backgroundImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="centerCrop"
        android:src="@drawable/bitmapie" />

    <TextView
        android:id="@+id/descTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginTop="70dp"
        android:background="@android:color/holo_blue_light"
        android:padding="10dp"
        android:text="TextView placed at the top of the Imageview"
        android:textColor="@android:color/white"
        android:textSize="22sp" />

</FrameLayout>

เอาท์พุต:

ป้อนคำอธิบายภาพที่นี่


40
ฉันชอบดูรหัสพร้อมผลลัพธ์ของพวกเขา ขอบคุณมาก! โหวตแล้ว นอกจากนี้ฉันชอบการออกแบบที่คุณทำที่นั่น เรียบง่าย แต่ดีมาก!
Tarik

3
คำอธิบายที่เรียบง่ายทรงพลัง แต่ใช้งานง่าย - ขอบคุณ @ojonugwaochalifu!
Coder Absolute

2
คำอธิบายดีมาก ฉันอ่าน "คำอธิบายของนักพัฒนาซอฟต์แวร์ในหน้าทางการและคิดว่าวลี" ด้านบน "มีความหมายมากกว่าที่ด้านบนของหน้าจอ คำอธิบายของคุณทำให้ลักษณะ 3 มิติของ "ด้านบน" คลิกสำหรับฉันและตอนนี้ฉันเข้าใจแล้ว ขอบคุณมาก :)
Slartibartfast

1
@ojonugwaochalifu: ขอบคุณสำหรับคำอธิบาย ฉันมีคำถามเล็ก ๆ สิ่งที่เราทำที่นี่เราสามารถทำได้โดยการจัดวางแบบสัมพัทธ์ด้วย แล้วทำไมเราใช้เค้าโครงเฟรม?
akashPatra

3
ใช่พวกเขาทำเกือบเหมือนกัน แต่จำไว้ว่าแนวทางปฏิบัติในการออกแบบที่ดีสำหรับมุมมองคือการใช้การซ้อนกันน้อยที่สุดสำหรับเค้าโครงของคุณ เมื่อคุณใช้ FrameLayout การซ้อนที่จำเป็นในการวางมุมมองซึ่งกันและกันจะน้อยกว่าเมื่อคุณใช้ RelativeLayout
Ojonugwa Jude Ochalifu

75

FrameLayoutเป็นการใช้งานViewGroupไฟล์. มุมมองของเด็กจะถูกวาดขึ้นในกองซ้อนซึ่งมุมมองที่เพิ่มล่าสุดจะวาดไว้ที่ด้านบน โดยปกติคุณสามารถใช้หนึ่งในแนวทางถัดไปหรือรวมเข้าด้วยกัน:

  1. เพิ่มลำดับชั้นมุมมองเดียวลงใน FrameLayout
  2. เพิ่มลูกหลายคนและใช้android:layout_gravityเพื่อนำทาง

ป้อนคำอธิบายภาพที่นี่

อีกวิธีหนึ่งที่เป็นที่นิยมในการใช้FrameLayout:

  • เป็นFragmentภาชนะ
  • เป็นบรรพบุรุษของประเพณีของคุณ ViewGroup

23

คุณสามารถพิจารณาคำว่าframeเป็นกรอบรูปธรรมดา คุณทำอะไรกับกรอบนั้น? คุณสามารถวางรูปถ่ายในเฟรมนั้นทีละภาพ เช่นเดียวกับที่FrameLayoutเราสามารถวางมุมมอง (เลย์เอาต์ใด ๆ หรือวิดเจ็ตเช่นปุ่มข้อความรูปภาพเป็นต้น) ด้านบนของอื่น ๆ เนื่องจาก@ojonugwaแสดงให้คุณเห็นด้านบนของTextviewของรูปภาพ


ดีฉันคิดว่ามันเป็นiframeเพราะฉันมาจากการพัฒนาเว็บ ขอบคุณสำหรับคำอธิบายที่ง่ายที่สุด
Tarik

19

แน่ใจหรือว่าคุณใช้ Googled แล้ว

เค้าโครงเฟรมออกแบบมาเพื่อปิดกั้นพื้นที่บนหน้าจอเพื่อแสดงรายการเดียว โดยทั่วไปควรใช้ FrameLayout เพื่อเก็บมุมมองย่อยเดี่ยวเนื่องจากอาจเป็นเรื่องยากที่จะจัดระเบียบมุมมองของเด็กด้วยวิธีที่ปรับขนาดได้ตามขนาดหน้าจอที่แตกต่างกันโดยไม่ให้เด็กซ้อนทับกัน

อย่างไรก็ตามคุณสามารถเพิ่มลูกหลายคนใน FrameLayout และควบคุมตำแหน่งของพวกเขาภายใน FrameLayout โดยกำหนดแรงโน้มถ่วงให้กับเด็กแต่ละคนโดยใช้แอตทริบิวต์ android: layout_gravity

ความลับของ FrameLayout คือการจัดวางลูก ๆ ของมันอย่างไร แม้ว่าโดยปกติจะได้รับการออกแบบให้มีรายการเดียว แต่ก็มีความสุขที่จะวางองค์ประกอบอื่น ๆ ไว้ด้านบนซึ่งกันและกัน ดังนั้น FrameLayout จึงเป็นวิธีจัดการลำดับ Z ของมุมมองบนหน้าจอ

สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับเทคนิค UI สองสามอย่างตั้งแต่องค์ประกอบที่คล้าย HUD ไปจนถึงแผงเลื่อนไปจนถึงการเปลี่ยนภาพเคลื่อนไหวที่ซับซ้อนยิ่งขึ้น ในโพสต์นี้เราจะเห็นตัวอย่างสำหรับแต่ละคน

FrameLayout ออกแบบมาเพื่อแสดงทีละรายการ คุณสามารถมีหลายองค์ประกอบภายใน FrameLayout แต่แต่ละองค์ประกอบจะวางตำแหน่งตามด้านซ้ายบนของหน้าจอ องค์ประกอบที่ทับซ้อนกันจะแสดงซ้อนกัน ฉันได้สร้างเค้าโครง XML อย่างง่ายโดยใช้ FrameLayout ที่แสดงวิธีการทำงานนี้


8
ใช่ฉันเห็นพวกเขา แต่ฉันไม่พบว่าพวกเขาพูดอะไร
Amin Ghasemi

คุณสามารถคิดเป็นกรอบรูป โดยทั่วไปสิ่งที่คุณใส่จะถูกกำหนดไว้ทางด้านซ้ายของหน้าจอ learn-android-easily.com/2013/05/frame-layout-in-androis.html
metehan

ดังนั้นคุณควรใช้เพื่อแสดงรายการเดียวเกือบตลอดเวลา
Metehan

4

โดยทั่วไปจะวางมุมมองหนึ่งไว้ด้านบนของอีกมุมมองหนึ่งเช่น:

ขยายข้อความบนรูปภาพ

  <FrameLayout>

<ImageView>
<Textview>

  </FrameLayout>

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