Android: จัดแนวปุ่มที่ด้านล่างขวาของหน้าจอโดยใช้ FrameLayout?


106

ฉันพยายามวางตัวควบคุมการซูมของแผนที่ไว้ที่มุมล่างขวาของหน้าจอ ฉันสามารถทำได้ด้วย RelativeLayout โดยใช้ทั้งสองalignParentBottom="true"และalignParentRight="true"แต่ด้วย Framelayout ฉันไม่พบแอตทริบิวต์ดังกล่าว ฉันจะจัดตำแหน่งให้ชิดขวาล่างของหน้าจอได้อย่างไร

คำตอบ:


252

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

ฉันรู้ว่ามันได้ผลเพราะฉันกำลังใช้มัน ฉันรู้ว่ามาช้า แต่อาจเป็นประโยชน์สำหรับคนอื่นเนื่องจากอันดับนี้อยู่ในตำแหน่งสูงสุดใน Google


7
สวัสดี byte1918 หากคุณคิดว่านี่ไม่ใช่คำตอบที่ถูกต้องสำหรับคำถามที่คุณยินดีต้อนรับและฉันคิดว่ามันจะมีประโยชน์สำหรับทุกคน - ถ้าคุณโพสต์วิธีแก้ปัญหาที่ถูกต้อง หรืออธิบายอย่างน้อยสิ่งที่ทำให้คำตอบนี้ผิด ขอบคุณ.
lblasa

33
ในการจัดแนวด้านล่างขวาคุณสามารถใช้ android: layout_gravity = "bottom | right"
Marcin Raczkowski

1
หากไม่ปรากฏในการแสดงตัวอย่างในทันทีให้ลองตั้งค่าจากแท็บออกแบบ มักใช้งานได้
yUdoDis

ฉันได้ลองใช้ Textview แล้วและใช้งานไม่ได้
The Only Smart Boy

51

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

ข้อความที่จัดชิดขวาล่างบางส่วนจะแสดงบนรูปภาพโดยใช้ FrameLayout

              <FrameLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" >

                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:src="@drawable/contactbook_icon"
                        android:layout_gravity="center" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="140"
                        android:textSize="12dp"
                        android:textColor="#FFFFFF"
                        android:layout_gravity="bottom|right"
                        android:layout_margin="15dp" />
                </FrameLayout>

เปลี่ยนค่าระยะขอบเพื่อปรับตำแหน่งข้อความเหนือรูปภาพ การลบขอบอาจทำให้ข้อความไม่อยู่ในมุมมองในบางครั้ง


คำตอบที่ดีที่สุด ... ขอบคุณไขปริศนาอันยาวนาน
YvesLeBorg

38

สามารถทำได้โดยใช้ RelativeLayout

<RelativeLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

   <ImageView 
      android:src="@drawable/icon"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_alignParentBottom="true" />

</RelativeLayout>

1
ไม่ได้ผลถ้าใช้wrap_contentในRelativeLayout. เพราะอย่างไรก็ตาม RelativeLayout ปรับขนาดบนหน้าจอทั้งหมด
Yura Shinkarev


9

สองวิธีในการทำสิ่งนี้:

1) การใช้เค้าโครงเฟรม

android:layout_gravity="bottom|right"

2) การใช้เค้าโครงสัมพัทธ์

android:layout_alignParentRight="true"
android:layout_alignParentBottom="true" 


3

หากคุณต้องการลองใช้รหัส java ได้แล้ว -

    final LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, 
                                             LayoutParams.WRAP_CONTENT);
    yourView.setLayoutParams(params);
    params.gravity = Gravity.BOTTOM; // set gravity

แค่สิ่งที่ฉันต้องการ เพิ่มเติมเล็กน้อย - LayoutParams ควรมาจาก FrameLayout.LayoutParams และถ้าคุณต้องการให้มุมขวาล่างใช้: params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
SajithK

2

คุณสามารถเพิ่ม TextView ที่มองไม่เห็นลงใน FrameLayout

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:visibility="invisible"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">
        <Button
            android:id="@+id/daily_delete_btn"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:text="DELETE"
            android:layout_gravity="center"/>
        <Button
            android:id="@+id/daily_save_btn"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:text="SAVE"
            android:layout_gravity="center"/>
    </LinearLayout>


0

มีหลายวิธีในการดำเนินการนี้โดยใช้วิดเจ็ตข้อ จำกัด ของหน้า activity.xml ของ android studio

สองวิธีที่พบบ่อยที่สุดคือ:

  1. เลือกมุมมองปุ่มของคุณและปรับระยะขอบ
  2. ไปที่ "แอตทริบิวต์ทั้งหมด" จากนั้นไปที่ "layout_constraints" จากนั้นเลือก
    • layout_constraintBottom_toBottomOf_parent
    • layout_constraintRight_toRightOf_parent

-3

คุณไม่สามารถทำได้ด้วย FrameLayout

จากข้อมูลจำเพาะ:

http://developer.android.com/reference/android/widget/FrameLayout.html

"FrameLayout ได้รับการออกแบบมาเพื่อปิดกั้นพื้นที่บนหน้าจอเพื่อแสดงรายการเดียวคุณสามารถเพิ่มลูกหลาย ๆ คนใน FrameLayout ได้ แต่ลูกทั้งหมดจะถูกตรึงไว้ที่ด้านซ้ายบนของหน้าจอ"

ทำไมไม่ใช้ RelativeLayout?


ฉันต้องการให้รายการแสดงทางด้านซ้ายโดยซ้อนทับบนแผนที่ โอ้เป็นไปได้ด้วย RelativeLayout ไม่ใช่เหรอ โอเคขอบคุณ.
Rohith Nandakumar

1
"แต่เด็กทุกคนจะถูกตรึงไว้ที่ด้านซ้ายบนของหน้าจอ" - ไม่จำเป็นต้องอยู่ด้านบนสุดของหน้าจอ
Rohith Nandakumar

ใช่เป็นไปได้ด้วย RelativeLayout คุณสามารถจัดวางมุมมองไว้ด้านบนของกันและกัน
Juhani

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