2015-11-27 79 views
0

我在ScrollView中有一個ListView。設置ListView高度以顯示所有可用項目

如何設置ListView的高度,使其適配器中的所有項都適合它,並且不需要滾動。

+0

你想滾動佈局而不是列表? –

+3

不要在滾動視圖中放置一個listview(它不推薦)。如果你想要一個不滾動的項目列表,它被稱爲線性佈局。 – phongvan

+0

@UdiIdan是的,正好 – mustafa

回答

5

如果你想要一個不滾動的項目列表,它被稱爲線性佈局。

不然,如果你願意,你可以自定義列表視圖爲:

public class NonScrollListView extends ListView { 

    public NonScrollListView(Context context) { 
     super(context); 
    } 
    public NonScrollListView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
    public NonScrollListView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 
    @Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
      int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
        Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); 
      super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom); 
      ViewGroup.LayoutParams params = getLayoutParams(); 
      params.height = getMeasuredHeight();  
    } 
} 
+0

謝謝,這是一個不錯的解決方案 – mustafa

+0

完美的解決方案。 – Jim

1

您可以使用這樣的事情,它會展開列表,所以它不會需要滾動。只記得有一個滾動型來包裝它在你的XML:

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

和類:

public class ExpandedListView extends ListView { 

private android.view.ViewGroup.LayoutParams params; 
private int old_count = 0; 

public ExpandedListView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    if (getCount() != old_count) { 
     old_count = getCount(); 
     params = getLayoutParams(); 
     params.height = getCount() * (old_count > 0 ? getChildAt(0).getHeight() : 0); 
     setLayoutParams(params); 
    } 

    super.onDraw(canvas); 
} 
} 

您也可以參考這個問題,這將是有益的: Calculate the size of a list view or how to tell it to fully expand

0

如果您正在使用ScrollView,如果它的內容高度大於屏幕尺寸,它將滾動。任何方式,嘗試使用參數波紋管,看看它是否做你想要的。

android:layout_height =「wrap_content」

相關問題