我使用下面的函数根据ListView中的项目数动态设置ListView的高度。
public boolean setListViewHeightBasedOnItems(ListView listView, String select) {
MyListAdapter adapter = (MyListAdapter) listView.getAdapter();
if (adapter != null) {
int numberOfItems = adapter.getCount();
// Get total height of all items.
int totalItemsHeight = 0;
for (int itemPos = 0; itemPos < numberOfItems; itemPos++) {
View item = adapter.getView(itemPos, null, listView);
float px = 300 * (listView.getResources().getDisplayMetrics().density);
item.measure(View.MeasureSpec.makeMeasureSpec((int) px, View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
totalItemsHeight += item.getMeasuredHeight();
}
// Get total height of all item dividers.
int totalDividersHeight = listView.getDividerHeight() *
(numberOfItems - 1);
// Get padding
int totalPadding = listView.getPaddingTop() + listView.getPaddingBottom();
// Set list height.
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalItemsHeight + totalDividersHeight + totalPadding; // +50
listView.setLayoutParams(params);
listView.requestLayout();
return true;
} else {
return false;
}
}
上述功能在具有下面提到的屏幕密度和OS的设备上运行良好。
Moto E3 Power(Android 6.0,720 x 1280像素,5.0英寸屏幕)。
联想A6010(Android 5.0.2,720 x 1280像素,5.0英寸屏幕)。
三星平板电脑SM T113(Android 4.4.4,600 x 1024像素,7.0英寸 屏幕)。
但是,当我在装有Android Nougat(7.0,7.1.1)的设备上运行相同的操作时,我在ListView的最后一项下面会出现空白区域。也就是说,设置的高度超过了要求。
下面的屏幕截图解释了我面临的问题。
提出此问题的设备如下: -
Moto E4 Plus(Android - 7.1.1,720 x 1280像素,5.5英寸屏幕)。
Moto E5 Plus(Android - 7.0,1080 x 1920像素,5.2英寸屏幕)。
下面是我对ListView的XMl声明。
<ListView
android:id="@+id/lv_menu_details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp10"
android:layout_marginRight="@dimen/dp10"
android:divider="@color/transparent" />
任何人都可以帮我解决我面临的问题。
提前致谢。
答案 0 :(得分:0)
我已经解决了我所面临的问题。
对于我来说,该解决方案在于我用于“列表视图”的适配器的项目列表中。
我在LinearLayout
和weight
中使用weightsum
,在LinearLayout中的小部件上,我将margin
和一些Views
给予了ListView
。
现在,随着整个视图除以权重和视图,额外的余量将在我的LinearLayout
属性底部创建空白,如发布的问题所示。我将RelativeLayout
替换为weight
,并从我的ViewGroup
的{{1}}和weightSum
属性中删除了View
属性。
它对我有用。
对于那些面临相同问题的人,我将在下面发布xml文件以供参考:
我的Old item_list.xml文件用于ListView项目UI:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="horizontal"
android:paddingLeft="@dimen/dp10"
android:paddingTop="@dimen/dp10"
android:paddingBottom="@dimen/dp10"
android:paddingRight="@dimen/dp5"
android:weightSum="5">
<CheckBox
android:id="@+id/iv_checkbox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:button="@drawable/selector_checkbox_menu_detail_item"
android:textColor="@color/white"
android:textSize="@dimen/sp18" />
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2.3"
android:text="dsfdsfds"
android:textColor="@color/black"
android:textSize="@dimen/sp15" />
<TextView
android:id="@+id/tv_price"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:text="dsfdsfds"
android:textColor="@color/black"
android:layout_marginRight="@dimen/dp10"
android:textSize="@dimen/sp15" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/layout_add_sub"
android:layout_weight="1.5"
android:orientation="horizontal"
android:weightSum="3">
<ImageView
android:id="@+id/iv_subtract"
android:layout_width="@dimen/dp30"
android:layout_height="@dimen/dp25"
android:layout_weight="1"
android:background="@drawable/button_shape"
android:padding="@dimen/dp5"
android:src="@drawable/minus" />
<TextView
android:id="@+id/tv_count"
android:layout_width="@dimen/dp30"
android:layout_height="@dimen/dp25"
android:layout_gravity="center"
android:layout_weight="1"
android:background="@drawable/button_shape"
android:gravity="center"
android:text="1"
android:textColor="@color/black" />
<ImageView
android:id="@+id/iv_add"
android:layout_width="@dimen/dp30"
android:layout_height="@dimen/dp25"
android:layout_marginRight="@dimen/dp5"
android:layout_weight="1"
android:background="@drawable/button_shape"
android:padding="@dimen/dp5"
android:src="@drawable/add" />
</LinearLayout>
</LinearLayout>
我的list_item.xml
文件中,我用LinearLayout
替换了RelativeLayout
,而没有使用weight
和weightSum
属性:-
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/app_background_color"
android:orientation="horizontal"
android:paddingTop="@dimen/dp10"
android:paddingBottom="@dimen/dp10">
<CheckBox
android:id="@+id/iv_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/dp5"
style="@style/CheckBoxStyle"
android:layout_marginRight="@dimen/dp5"
android:textColor="@color/app_text_color_primary"
android:textSize="@dimen/sp18" />
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/iv_checkbox"
android:layout_toLeftOf="@+id/liLayRightPanel"
android:text="dsfdsfd"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/dp10"
android:textColor="@color/app_text_color_primary"
android:textSize="@dimen/sp15" />
<LinearLayout
android:id="@+id/liLayRightPanel"
android:orientation="horizontal"
android:layout_alignParentRight="true"
android:layout_marginRight="@dimen/dp5"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="dsfdsfd"
android:layout_gravity="center"
android:gravity="center"
android:textColor="@color/app_text_color_primary"
android:layout_marginRight="@dimen/dp10"
android:textSize="@dimen/sp15" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/layout_add_sub"
android:layout_weight="3"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_subtract"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/circle_theme_bkgnd"
android:padding="@dimen/dp5"
android:src="@drawable/minus" />
<TextView
android:id="@+id/tv_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp5"
android:layout_marginRight="@dimen/dp5"
android:textSize="@dimen/sp16"
android:textStyle="bold"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:text="0"
android:textColor="@color/app_text_color_primary" />
<ImageView
android:id="@+id/iv_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/circle_theme_bkgnd"
android:padding="@dimen/dp5"
android:src="@drawable/add" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
希望我的答案可以帮助面临相同问题的人...