我有一个在xml中定义的列表视图,现在我正在设置内容视图setContentView(R.layout.topic_layout);
,我有5个项目,目前它只填充列表视图的一半高度,但我希望它完全填充高度,使我底部没有任何空间。
我已经搜索过但无法找到任何解决方案,请帮助我实现这个目标:
我也正在设置适配器:
adapter = new MyAdapter(this);
if (adapter != null) {
setListAdapter(adapter);
}
答案 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)
这就是我用来做的事情:
活动布局:
(...)
<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;
}
}