จำกัดความสูงของ ListView บน Android


92

ฉันต้องการแสดงปุ่มใต้ไฟล์ListView. ปัญหาคือถ้าListViewขยายออก (เพิ่มรายการ ... ) ปุ่มจะถูกผลักออกจากหน้าจอ

ฉันลองLinearLayoutชั่งน้ำหนัก (ตามที่แนะนำในAndroid: เหตุใดจึงไม่มี maxHeight สำหรับมุมมอง ) แต่ฉันคิดว่าน้ำหนักผิดหรือไม่ได้ผล

นอกจากนี้ฉันพบคำแนะนำในการใช้ไฟล์RelativeLayout. ListViewนั้นก็จะถูกกำหนดข้างต้นปุ่มที่มีandroid:layout_aboveพารามิเตอร์

ปัญหานี้คือฉันไม่รู้ว่าจะวางตำแหน่งปุ่มอย่างไรในภายหลัง ในตัวอย่างที่ฉันพบมุมมองด้านล่างListViewถูกปรับโดยใช้android:layout_alignParentBottomแต่ฉันไม่ต้องการให้ปุ่มของฉันยึดติดกับด้านล่างของหน้าจอ

มีแนวคิดใดบ้างที่นอกเหนือจากการใช้ setHeight-method และการคำนวณพื้นที่ที่ต้องการ


แก้ไข: ฉันได้รับคำตอบที่เป็นประโยชน์มากมาย

  • โซลูชันของ bigstone & user639183 ทำงานได้เกือบสมบูรณ์ อย่างไรก็ตามฉันต้องเพิ่มช่องว่าง / ระยะขอบพิเศษที่ด้านล่างของปุ่มเนื่องจากมันจะยังคงถูกผลักออกไปครึ่งทางจากหน้าจอ (แต่ก็หยุดแล้ว)

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

  • วิธีแก้ปัญหาของ AngeloS เป็นวิธีที่ฉันเลือกในตอนท้ายเพราะมันเพิ่งสร้างเอฟเฟกต์ที่ฉันต้องการ อย่างไรก็ตามฉันได้ทำการเปลี่ยนแปลงเล็กน้อยสองครั้งกับLinearLayoutปุ่มรอบ ๆ ปุ่ม:

    • ก่อนอื่นเนื่องจากฉันไม่ต้องการให้มีค่าสัมบูรณ์ในเค้าโครงของฉันฉันจึงเปลี่ยนandroid:layout_height="45px"เป็นwrap_contentซึ่งก็ใช้ได้ดีเช่นกัน

    • อย่างที่สองเนื่องจากฉันต้องการให้ปุ่มอยู่ตรงกลางในแนวนอนซึ่งรองรับเฉพาะในแนวตั้งLinearLayoutฉันจึงเปลี่ยน android: orientation = "horizontal" เป็น "vertical"

    AngeloS ยังระบุในโพสต์แรกของเขาด้วยว่าเขาไม่แน่ใจว่าandroid:layout_weight="0.1"พาราในLinearLayoutรอบนั้นListViewมีผลหรือไม่ ฉันเพิ่งลองและมันทำได้จริง! หากไม่มีปุ่มจะถูกดันออกจากหน้าจออีกครั้ง


ด้วยวิธีนี้เลย์เอาต์สัมพัทธ์ภายในจะเติบโตขึ้นนานกว่าหน้าจอขั้นตอนเดียวก็สามารถเพิ่มandroid:layout_alignParentBottom="true"ได้ แต่เพื่อความชัดเจนคุณต้องการให้ปุ่มติดอยู่ที่ด้านล่างของ ListView เมื่อมีบางรายการหรือไม่? ถ้าใช่ดูสิ่งที่ริชพูด
bigstones

ใช่นั่นคือสิ่งที่ฉันต้องการ
แมงกะพรุน

หลายปีต่อมาตอนนี้เรามีความสูงสูงสุดด้วย ConstraintLayout: stackoverflow.com/questions/42694355/…
user1506104

คำตอบ:


55

ฉันมีปัญหาที่แน่นอนนี้และเพื่อแก้ปัญหานี้ฉันได้สร้างสองแยกLinearLayoutsเพื่อเป็นที่ตั้งListViewและButtonตามลำดับ จากนั้นฉันใส่ทั้งในอีกLinear Layoutและตั้งค่าว่าคอนเทนเนอร์ไปandroid:orientation verticalฉันยังตั้งค่าน้ำหนักของที่LinearLayoutเป็นที่ตั้งListViewไป0.1แต่ผมไม่ทราบว่ามีผลกระทบใด ๆ จากนั้นคุณสามารถตั้งค่าความสูงของภาชนะด้านล่าง (ที่มีปุ่มของคุณ) เป็นความสูงใดก็ได้ที่คุณต้องการ

แก้ไขนี่คือสิ่งที่ฉันหมายถึง:

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

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.1"
    android:orientation="horizontal">

    <ListView
        android:id="@+id/ListView01"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:dividerHeight="2px"></ListView>
</LinearLayout>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="45px"
    android:background="@drawable/drawable"
    android:orientation="horizontal">

    <Button
        android:id="@+id/moreButton"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignParentRight="true"
        android:background="@drawable/btn_more2"
        android:paddingRight="20px" />

</LinearLayout>

วิธีแก้ปัญหาข้างต้นจะแก้ไขปุ่มที่ด้านล่างของหน้าจอ


หากต้องการให้ปุ่มลอยที่ด้านล่างของรายการให้เปลี่ยนความสูงListView01เป็นwrap_content:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.1"
    android:orientation="horizontal">

    <ListView
        android:id="@+id/ListView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:dividerHeight="2px"></ListView>
</LinearLayout>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="45px"
    android:background="@drawable/drawable"
    android:orientation="horizontal">

    <Button
        android:id="@+id/moreButton"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignParentRight="true"
        android:background="@drawable/btn_more2"
        android:paddingRight="20px" />
</LinearLayout>


ฉันเห็นว่ามันเป็นสิ่งที่คล้ายกับ<divแท็กใน HTML .. มันเป็นแค่กระดาษห่อหุ้มและวิธีนี้ใช้ได้ผลแน่นอน
AngeloS

และเกี่ยวกับค่าใช้จ่ายมันก็ไม่ได้แตกต่างกันมากนักกับสิ่งที่คุณกำลังทำกับเลย์เอาต์แบบสัมพัทธ์ .. ตอนนี้คุณมีกระดาษห่อหุ้มด้านนอกหนึ่งอันและคุณกำลังซ้อนอีกอันหนึ่งฉันขอแนะนำให้คุณทำรังอีกอันหนึ่งและแยกมุมมองรายการ และปุ่มในสองคอนเทนเนอร์สร้างเอฟเฟกต์สแต็กในเค้าโครงเชิงเส้นแนวตั้ง ฉันไม่เครียดพอที่จะแก้ปัญหานี้ได้
AngeloS

1
ใช่! ได้ผล! สิ่งสำคัญที่จะทราบความแตกต่างระหว่างการแก้ปัญหาครั้งแรกและครั้งที่ 2 ของคุณมีความต้องการที่จะ LinearLayout wrap_content ดังนั้นฉันสิ้นสุดขึ้นกับชนิดของการก่อตั้งการตั้งค่า: imgur.com/c9L1Z ใครก็ตามที่พบสิ่งนี้: การถ่วงน้ำหนักเป็นสิ่งสำคัญ แต่สามารถใช้ค่าใดก็ได้
แซม

2
ไม่จำเป็นต้องตัดมุมมองทั้งหมดเช่นนั้น - ตรวจสอบโซลูชันของ @ Sparkle
Richard Le Mesurier

จำเป็นต้องใส่ 45px หรือค่าที่แน่นอนสำหรับรูปแบบปุ่มหรือไม่? ฉันต้องใส่ wrap_content แทน
Mario Velasco

65

ฉันแก้ไขปัญหานี้ด้วยรหัสการตั้งค่าความสูงของ listview ก็ต่อเมื่อมีมากกว่า 5 รายการในนั้น:

if(adapter.getCount() > 5){
        View item = adapter.getView(0, null, listView);
        item.measure(0, 0);         
        ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, (int) (5.5 * item.getMeasuredHeight()));
        listView.setLayoutParams(params);
}

สังเกตว่าฉันตั้งค่าความสูงสูงสุดเป็น 5.5 เท่าของความสูงของรายการเดียวดังนั้นผู้ใช้จะรู้ว่ามีการเลื่อนบางอย่างที่ต้องทำ! :)


1
คำตอบที่ดี ด้วยรหัสนั้นฉันค้นพบความสูงของรายการของฉันและตอนนี้ฉันสามารถกำหนดขนาดของรายการเพื่อแสดงจำนวนรายการที่ฉันต้องการได้ ขอบคุณ.
Derzu

3
นี่คือคำตอบที่ดีที่สุด ทำไมต้องเขียน XML ที่ซ้อนกัน 50 บรรทัดในเมื่อคุณสามารถแก้ปัญหาด้วยโค้ด 5 บรรทัดได้?
Greg Ennis

ขอบคุณ @shaylh. ทำงานได้อย่างสมบูรณ์แบบ
Anju

แม้ว่าฉันจะทำความสะอาดโซลูชัน XML อย่างดี แต่ฉันก็ยังคงใช้แนวคิดนี้ในผลิตภัณฑ์สุดท้ายของฉัน
Richard Le Mesurier

1
@JayR มันไม่สายเกินไปที่จะแสดงความคิดเห็น
Manza

21

ในการแก้ไขครั้งล่าสุดคุณต้องเพิ่มandroid:layout_above="@+id/butt1"รหัส ListView ของคุณด้วย

และเพื่อแสดงให้คุณเห็น (และทุกคนที่นี่ที่ลองคำตอบก่อนหน้านี้) ว่าคุณไม่จำเป็นต้องใช้มากกว่าหนึ่งข้อRelativeLayoutนี่คือรหัสที่คุณแก้ไข :

   <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/bkg">
    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="TextView1"
        android:layout_alignParentTop="true">
    </TextView>
    <TextView
        android:id="@+id/textView2"
        android:layout_below="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="TextView2"
        android:layout_centerHorizontal="true">
    </TextView>
    <Button
        android:id="@+id/butt1"
        android:text="string/string3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true">
    </Button>
    <ListView
        android:id="@+id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="2dip"
        android:layout_marginBottom="2dip"
        android:drawSelectorOnTop="false"
        android:visibility="visible"
        android:layout_below="@+id/textView2"
        android:layout_above="@+id/butt1" />
    </RelativeLayout>

และผลลัพธ์โดยใช้รายการสุ่ม:
ป้อนคำอธิบายภาพที่นี่


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

ดูเหมือนว่าครั้งนี้ LinearLayouts อาจเป็นทางออกเดียวสำหรับสิ่งที่คุณต้องการ ฉันได้ลองชุดค่าผสมต่างๆกับ RelativeLayouts แล้ว แต่ก็ไม่มีอะไรได้ผลเลย :( ... แต่ฉันดีใจที่คุณพบคำตอบของคุณ
Adinia

1
ขอขอบคุณ! มันสมบูรณ์แบบ!
Guicara

6

ใช้LinearLayoutกำหนดความสูงของคุณListViewและButtonไปwrap_contentและเพิ่มน้ำหนัก = ListView1 สิ่งนี้ควรได้ผลตามที่คุณต้องการ
และใช่ตั้งค่าlayout_gravityของButtonการbottom


6

พบวิธีที่ทำได้โดยไม่ต้องใช้คอนเทนเนอร์ซ้อนกันซึ่งได้รับแรงบันดาลใจจากโซลูชันของ AngeloS

ฉันใช้LinearLayoutกับการวางแนวตั้งซึ่งมีListViewปุ่มและปุ่ม ฉันตั้งค่าandroid:layout_weight="0.1"สำหรับListView.

มันจัดการเพื่อให้ปุ่มติดที่ด้านล่างของรายการเสมอ และปุ่มจะไม่ถูกผลักออกจากหน้าจอเมื่อรายการเติบโตขึ้น

<ListView
    android:id="@+id/notes_list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.1"        
    />

<Button
    android:id="@+id/create_note_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"        
    android:onClick="onCreateButtonClicked"
    android:text="@string/create_notes"
    />

2
ไม่เพียงแค่ลองใช้งานแล้วปุ่มจะอยู่ที่ด้านล่างของหน้าจอโดยจะไม่อยู่ที่ด้านล่างของรายการ :(
Adinia

@Adinia สิ่งนี้ทำงานได้อย่างสมบูรณ์อย่างน้อยใน 4.4.3 ทางออกที่ดี Sparkle ควรมีคะแนนโหวตมากกว่านี้
Richard Le Mesurier

ฮึ่ม.. บางทีคุณอาจมีการตั้งค่าอื่น ๆ ในเค้าโครงของคุณ? ฉันเพิ่งทดสอบอีกครั้งบน Nexus 4 ด้วย 4.4.3 และปุ่มจะอยู่ที่ด้านล่างของเค้าโครงไม่ใช่ของรายการ แต่จะไม่ติดอยู่ในรายการ
Adinia

2
@Richard Le Mesurier อันที่จริง android:layout_height="wrap_content" สำหรับ LinearLayout เช่นเดียวกับในโซลูชันของคุณมันทำงานได้อย่างสมบูรณ์และไม่เพียง แต่ใน 4.4.3 แต่เนื่องจาก Sparkle ไม่ได้พูดถึงมันฉันจึงลองใช้match_parentมาก่อน
Adinia

ทำงานกับพายด้วย +1
Zubair Younas

5

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

มันจะเหมือนกันถ้าคุณใช้ a LinearLayout: วิธีที่จะบรรลุสิ่งที่คุณต้องการคือตั้งค่าListViewเป็น height = 0 และ weight = 1 และสำหรับปุ่ม height = wrap_content และ weight = 0 (การตั้งค่าเป็น wrap_content ตามที่ user639183 กล่าวว่าจะไม่จำกัดความListViewสูงของ)


ใช่มันจะจำกัดความListViewสูง
ernazm

@ user639183 เพิ่งลองคุณพูดถูกฉันขอโทษฉันมั่นใจในเรื่องนั้นมาก
bigstones

ฉันเปลี่ยนน้ำหนักตามที่แนะนำ (ก่อนหน้านี้ฉันมี ListView weight = 2 และ button weight = 1 สงสัยว่าทำไมถึงไม่ได้ผล) เอฟเฟกต์น่าสนใจมาก: ตอนนี้ปุ่มถูกผลักออกไปเพียงครึ่งเดียวจากหน้าจอ อันที่จริงฉันสามารถทำให้มันอยู่ในที่ที่ต้องการได้โดยเพิ่ม "android: layout_marginBottom" อย่างไรก็ตามฉันอาจลองใช้วิธี Maxims และดูว่ามันใช้งานได้หรือไม่
แมงกะพรุน

@jellyfish: ฉันไม่รู้ใบรับรองของฉันถูกทำลายโดย @ user639183 แนวคิดคือความสูงทั้งหมดจะถูกแชร์โดยมุมมองทั้งสอง จำนวนหุ้นที่พวกเขาได้รับจะขึ้นอยู่กับน้ำหนักของพวกเขาดังนั้น 1-0 -> ทุกอย่างสำหรับตัวแรก (2-1 จะให้พื้นที่ 1/3 ของวินาที) ฉันคิดว่าการตั้งค่า wrap_content ในมุมมองแบบเลื่อนจะทำให้สูงพอ ๆ กับเนื้อหา อย่างไรก็ตาม .. คุณได้ตั้งค่าการจัดวางภายนอกเป็น Fill_parent หรือไม่
bigstones

เป็นเรื่องแปลกจริงๆที่ RelativeLayout ที่ซ้อนกัน (ตามที่ Maxim แนะนำ) ไม่ทำงาน ฉันอาจจะโพสต์ไว้ข้างบนเพราะฉันรู้สึกว่าฉันพลาดอะไรไป ...
แมงกะพรุน

2

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

สิ่งที่เป็นไปได้เช่นนี้:

RelativeLayout

- ListView

- RelativeLayout

---- ปุ่ม

เมื่อใช้ตัวเลือกการจัดตำแหน่งที่แตกต่างกันบนคอนเทนเนอร์ทั้งสองคุณจะสามารถใช้งานได้


ฉันคิดว่าการใช้ relativeLayout เป็นทางออกที่ดีที่สุด แต่ฉันไม่สามารถเข้าใจได้ว่าทำไมคุณถึงใช้คอนเทนเนอร์ที่ซ้อนกันเมื่อคุณสามารถใช้บางอย่างเช่นandroid:layout_marginTop="30dip" สำหรับปุ่มได้เช่นหากคุณต้องการช่องว่างระหว่างรายการและปุ่มมากขึ้น
Adinia

ในคำถาม OP กล่าวว่าหากเขาวางตำแหน่งของปุ่มอย่างเคร่งครัดโดยสัมพันธ์กับ ListView มันจะออกจากหน้าจอเมื่อ ListView เติบโตสูงพอ ในกรณีเหล่านี้คุณต้องยุ่งยากกับตู้คอนเทนเนอร์ที่ซ้อนกัน
Rich

2

นี่เป็นวิธีที่สะอาดที่สุด:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
  <ListView
      android:id="@+id/ListView01"
      android:layout_width="fill_parent"
      android:layout_height="0dp"
      android:layout_weight="1"
      android:dividerHeight="2px">
  </ListView>
  <FrameLayout
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:background="@drawable/drawable"
      >
    <Button android:background="@drawable/btn_more2"
        android:id="@+id/moreButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:paddingRight="20px"
        />    
  </LinearLayout>
</LinearLayout>

คล้ายกับโซลูชันของ Angelos แต่คุณไม่จำเป็นต้องใช้ linearlayout ที่รวม ListView นอกจากนี้คุณสามารถใช้ FrameLayout ซึ่งเบากว่าเมื่อเทียบกับ LinearLayout เพื่อรวมปุ่ม


2

แนวคิดนี้ระบุไว้ในแนวทางแก้ไขปัญหาที่ดีโดย:

ดูเหมือนว่าทั้งคู่จะทำงานได้อย่างสมบูรณ์แบบอย่างน้อยก็ใน v4.4.3

ฉันยังต้องใช้เวลาเขียนโค้ดทดสอบเพื่อตรวจสอบและยืนยันแต่ละวิธี ด้านล่างนี้คือรหัสทดสอบขั้นต่ำที่มีอยู่ในตัว


เค้าโครงขึ้นอยู่กับโซลูชันของ Sparkle เนื่องจากมีเค้าโครงที่ซ้อนกันน้อยกว่า นอกจากนี้ยังได้รับการอัปเดตเพื่อให้สอดคล้องกับการตรวจสอบ LINT ปัจจุบัน

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    tools:context="MainActivity" >

    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <Button
        android:id="@+id/btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Grow List"
        tools:ignore="HardcodedText" />

</LinearLayout>

กิจกรรมให้รหัสต้นแบบเพื่อทดสอบวิธีแก้ปัญหาด้วยตัวคุณเอง

public class MainActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ListView listview = (ListView)findViewById(R.id.listview);
        final ArrayAdapter<String> adapter = 
                new ArrayAdapter<String>(this,
                                         android.R.layout.simple_list_item_1,
                                         new ArrayList<String>());
        adapter.setNotifyOnChange(true);
        listview.setAdapter(adapter);

        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener()
        {

            @Override
            public void onClick(View v)
            {
                int count = adapter.getCount();
                adapter.add(String.valueOf(count));
                listview.setSelection(count);
            }
        });
    }
}

อย่าลังเลที่จะเพิ่มหรือปรับปรุงเนื่องจากนี่คือ "วิกิชุมชน"


1

พยายามใช้ RelativeLayout ที่มีปุ่มด้านล่าง กำหนดความสูงของเค้าโครงเป็น "wrap_content" ฉันยังไม่ได้ลอง เพียงแค่ความคิด


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


0

ต่อไปนี้คือสิ่งที่เหมาะกับฉัน ...

 if(adapter.getCount() > 3){
                    View item = adapter.getView(0, null, impDateListView);
                    item.measure(0, 0);         
                    LayoutParams params = impDateListView.getLayoutParams();
                    params.width = LayoutParams.MATCH_PARENT;
                    params.height = 3 * item.getMeasuredHeight();
                    impDateListView.setLayoutParams(params);


                }

หมายเหตุ: params.width = ... จำเป็นต้องตั้งค่าด้วย ...

ตัวอย่างข้างต้นคือเมื่อคุณใช้ TableRow และ ListView ภายใน TableRow ...


0

ตัดเนื้อหาในเค้าโครงเชิงเส้น

ในมุมมองรายการเพิ่ม: android: layout_weight = "1"

ในปุ่มของคุณตั้งค่าความสูงคงที่

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

<ListView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1">
</ListView>

 <Button
    android:text="Button"
    android:layout_width="match_parent"
    android:layout_height="50dp"/>

</LinearLayout>

0

หากคุณต้องการให้เนื้อหาด้านล่างมุมมองรายการเลื่อนลงเมื่อมีการเพิ่มองค์ประกอบลงในรายการให้ลองใช้วิธีนี้:

เพิ่มช่องว่างในเชิงบวกที่ด้านล่างของมุมมองรายการและช่องว่างเชิงลบที่ด้านบนของ "ส่วนท้าย" สิ่งนี้จะทำงานในเค้าโครงเชิงเส้นหรือเค้าโครงสัมพัทธ์

<ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="50dp"/>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="-50dp"/>

-1

เนื่องจากไม่มีแอตทริบิวต์ MaxHeight ทางออกที่ดีที่สุดของคุณเป็นทั้งการตั้งค่าความสูงของ ListView wrap_contentเพื่อค่าที่ตั้งไว้หรือกับการใช้งาน


-2

ฉันแก้ไขสิ่งนี้โดยวาง ListView ไว้ใน ScrollView Lint ไม่ชอบ แต่ด้วยการเพิ่ม minHeight และตั้งค่า fillViewport เป็น true ฉันได้ผลลัพธ์ที่ดี

    <ScrollView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="1dp"
        android:layout_marginRight="1dp"
        android:minHeight="100dp"
        android:fillViewport="true"
        android:fadeScrollbars="false"
        android:paddingTop="2dp" 
        android:orientation="vertical"
        android:scrollbarAlwaysDrawVerticalTrack="true" >

        <ListView
            android:id="@+id/workoutAElistRoutines"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="fill_vertical"
            android:background="@drawable/dialog_inner_border_tan"
            android:choiceMode="singleChoice"
            android:orientation="vertical"
            android:paddingLeft="3dp"
            android:paddingRight="3dp" >

        </ListView>
    </ScrollView>        

ฉันลองใช้วิธีนี้แม้ว่าคุณจะ จำกัด ขนาดของมุมมองรายการ แต่ก็ไม่ให้ฉันเลื่อนมุมมองรายการซึ่งน่าอึดอัดใจ คุณรู้ไหมว่าทำไม?
Eduardo

7
ไม่เคยใส่ ListView ไว้ใน ScrollView!
jenzz

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