1

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

我已经搜索过但找不到任何解决方案,请帮助我实现这一点:

而且我正在设置这样的适配器:

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

        }
4

3 回答 3

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 的尺寸已经计算出来并在屏幕上布局。

希望这可以帮助。

于 2013-05-06T19:40:07.370 回答
0

我完全同意@Aswin,使用带有 layout_weight 属性的 LinearLayout 将是您的解决方案。但是,如果您坚持使用 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 方法上设置膨胀视图的高度。

于 2013-05-06T20:14:15.397 回答
0

这是我用来做的:

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

活动布局:

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

列表视图的 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;
    }
}
于 2016-12-08T12:24:17.480 回答