Android: วิธีทำให้มุมมองเติบโตขึ้นเพื่อเติมเต็มพื้นที่ว่าง


91

ดูเหมือนจะตรงไปตรงมา แต่ฉันคิดไม่ออกว่าจะทำอย่างไร ฉันมีเค้าโครงแนวนอนพร้อมด้วย EditText และ ImageButtons สองปุ่ม ฉันต้องการให้ ImageButtons มีขนาดคงที่และ EditText เพื่อใช้พื้นที่ที่เหลือในเค้าโครง จะสำเร็จได้อย่างไร?

<LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">
        <EditText 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </EditText>
        <ImageButton 
            android:src="@drawable/img1"
            android:layout_width="50dip" 
            android:layout_height="50dip">
        </ImageButton>
        <ImageButton 
            android:src="@drawable/img2"
            android:layout_width="50dip" 
            android:layout_height="50dip">
        </ImageButton>
</LinearLayout>

คำตอบ:


51

ลองใช้ในรูปแบบสัมพัทธ์

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content">
    <ImageButton 
        android:id="@+id/btn1"
        android:src="@drawable/icon"
        android:layout_width="50dip" 
        android:layout_height="50dip"
        android:layout_alignParentRight="true"/>
    <ImageButton 
        android:id="@+id/btn2"
        android:src="@drawable/icon"
        android:layout_width="50dip" 
        android:layout_height="50dip"
        android:layout_toLeftOf="@+id/btn1"/>
    <EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/btn2">
    </EditText>

</RelativeLayout>

4
ขอขอบคุณ. ใช้งานได้ดี (ยกเว้นว่าต้องกำหนด ImageButtons ก่อน EditText ตามที่โจเซฟกล่าวไว้)
ab11

1
Fill_parent - ค่าคงที่นี้เลิกใช้แล้วโดยเริ่มจาก API ระดับ 8 และถูกแทนที่ด้วย {@code match_parent}
Zon

149

หากคุณต้องการให้เค้าโครงเหมือนเดิม (เช่นปุ่มหลังข้อความ) ให้ใช้layout_weightคุณสมบัติพร้อมด้วยfill_parentดังนี้:

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content">
    <EditText 
        android:layout_weight="1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </EditText>
    <ImageButton 
        android:src="@drawable/img1"
        android:layout_width="50dip" 
        android:layout_height="50dip">
    </ImageButton>
    <ImageButton 
        android:src="@drawable/img2"
        android:layout_width="50dip" 
        android:layout_height="50dip">
    </ImageButton>
 </LinearLayout>

การให้EditText'น้ำหนัก' ทำให้คำนวณได้ในระยะสุดท้ายและให้ความสำคัญกับปุ่มต่างๆ เล่นกับ Layout_weights ที่แตกต่างกันและดูว่าคุณจะสนุกแค่ไหน!


1
ขอขอบคุณ. ฉันมีเลย์เอาต์ 3 ส่วน (ส่วนหัวเนื้อหา - WebView และส่วนท้าย) มันแก้ปัญหาได้โดยการตั้งค่า WebView layout_weight = 1 และ layout_weight ของส่วนท้าย = 0
MKK

ไม่ทราบเคล็ดลับในการตั้งค่าน้ำหนักและ 0dp ให้เหลือเพียงลูกเดียว .. ขอบคุณ!
Marcel Bro

1
โดยทั่วไปถือเป็นแนวทางปฏิบัติที่ดีที่สุดหรือไม่ เป็นเรื่องน่าสนใจที่คุณสามารถมีอิทธิพลต่อลำดับที่ Android แก้ไขมุมมองได้
Cypress Frankenfeld

2
ความกว้างควรเก็บไว้ 0 ฉันคิดว่า
Bibaswann Bandyopadhyay

19

ตกลง:

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

        <ImageButton 
            android:id="@+id/button1"
            android:src="@drawable/img1"
            android:layout_width="50dip"
            android:layout_alignParentTop="true" 
            android:layout_height="50dip">
        </ImageButton>
        <ImageButton 
            android:src="@drawable/img2"
            android:layout_width="50dip" 
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@id/button1"
            android:layout_height="50dip">
        </ImageButton>
        <EditText 
            android:layout_below="@id/button"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent">
        </EditText>
</RelativeLayout>

ประเด็นสำคัญของเค้าโครงคือ:

  • รายการที่มีขนาดคงที่จะถูกวางไว้ก่อนในเลย์เอาต์ด้วยวิธีนี้เมื่อ Android คำนวณความสูงของความสูงของสิ่งต่างๆfill_parentในภายหลังในไฟล์จะคำนึงถึงพื้นที่ที่เหลือเท่านั้นไม่ใช่พื้นที่ทั้งหมดที่อาจครอบครองได้หาก ไม่มีอะไรอีกแล้ว
  • EditText มีความสูงfill_parent( match_parentใน 2.2+) เพื่อให้ใช้พื้นที่ว่างที่เหลือ

ขออภัยไม่ได้อ่านคำถามของคุณจะเพียงพอ โค้ดด้านบนให้คำตอบหากคุณต้องการทำในแนวตั้ง สำหรับเค้าโครงแนวนอนโค้ดที่โพสต์โดย @Sunil ควรใช้งานได้


ขอบคุณโจเซฟ สิ่งนี้ได้ผล แม้ว่าฉันจะให้เครดิตกับ Sunil ว่าเร็วกว่าเล็กน้อย
ab11

14

ใช้ตั้งค่าlayout_widthหรือlayout_heightเป็น0dp(ตามการวางแนวที่คุณต้องการเติมช่องว่างที่เหลือ) จากนั้นใช้layout_weightเพื่อเติมช่องว่างที่เหลือ

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