Android列表视图填充内容的高度

时间:2013-05-06 19:20:56

标签: android listview

我有一个在xml中定义的列表视图,现在我正在设置内容视图setContentView(R.layout.topic_layout);,我有5个项目,目前它只填充列表视图的一半高度,但我希望它完全填充高度,使我底部没有任何空间。

我已经搜索过但无法找到任何解决方案,请帮助我实现这个目标:

我也正在设置适配器:

adapter = new MyAdapter(this);
        if (adapter != null) {
        setListAdapter(adapter);

        }

3 个答案:

答案 0 :(得分:3)

如果您有固定数量的项目并希望它们一直延伸到屏幕的末尾,则ListView不是您的最佳选择。使用LinearLayout占用所有空间并将所有项添加到其中。这假设您希望每次都占用所有空间。

使用LinearLayout,您可以均匀地展开项目而无需自己进行任何计算。

LinearLayout linearLayout = new LinearLayout(getSupportActivity());
linearLayout.setOrientation(android.widget.LinearLayout.VERTICAL);

RelativeLayout.LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT);

for (int i = 0; i < 5; i++) {
    View individualView = new View(getSupportActivity());
    // Create your custom view here and add it to the linear layout
    // Leave the height as 0, LinearLayout will calculate the height properly.
    params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0);
    additionalOption.setLayoutParams(params);

    // As a we are adding it to the linear layout, they will all have a weight of 1, which will make them spread out evenly.
    linearLayout.addView(additionalOption);
}
mainView.addView(linearLayout);

编辑:如果您已经使用ListView实现了它并且更改它很麻烦,您可以执行以下操作。

确保列表视图的宽度和高度在xml中设置为match_parent。然后在您创建自定义视图的适配器的getView()中,执行以下操作

// Get the height of the ListView
int totalHeight = listView.getHeight();
int rowHeight = totalHeight/getCount(); // Divide by number of items.

// Create custom view with the height calculated above.

注意totalHeight为0.如果在onCreate()中创建ListView并在onCreate()中设置适配器,则ListView很可能还没有计算宽度或高度。尝试在onResume()中设置适配器。到目前为止,ListView的尺寸已经计算并在屏幕上显示。

希望这有帮助。

答案 1 :(得分:0)

我完全同意@Aswin,使用LinearLayout和layout_weight属性将是你的解决方案。但是如果你坚持使用listView,我可以为你提供一个不那么推荐的锻炼。

使用这些代码创建活动时,您可以获得screenHeight:

Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
DisplayMetrics dm = new DisplayMetrics();
display.getMetrics(dm);
int height = dm.heightPixels;
int listItemHeight = height / YOUR_ITEM_COUNT;

然后你可以在listAdapter中使用这个listItemHeight,方法是在getView方法上设置膨胀视图的高度。

答案 2 :(得分:0)

这就是我用来做的事情:

  1. 将xml listview height设置为match_parent而不是wrap_content,以填充所有可用空间。
  2. 设置列表视图中每个项目的最小高度,以匹配列表视图高度除以元素数量。
  3. 活动布局:

    (...)
    <ListView
    android:id="@+id/myListView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
    (...)
    

    Listview的ArrayAdapter:

    private class MyAdapter extends ArrayAdapter<MyObject> {
    
        (...)
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            MyObject myobject = getItem(position);
            ObjectHolder oh;
            if (convertView == null) {
                LayoutInflater mInflater = (LayoutInflater) myContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                convertView = mInflater.inflate(R.layout.myitemlayout, parent, false);
            // This is the important line:
                convertView.setMinimumHeight(parent.getHeight()/getCount());
            (...)
    
            return convertView;
        }
    }