gpt4 book ai didi

android - 基于项目设置 ListView 高度在 Android Nougat 设备的末尾提供额外的空间

转载 作者:行者123 更新时间:2023-11-29 02:35:50 25 4
gpt4 key购买 nike

我使用下面的函数根据 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;
}
}

上述功能在具有下面提到的屏幕密度和操作系统的设备上运行良好。

Moto E3 Power (Android 6.0, 720 x 1280 pixels, 5.0 inch screen).

Lenovo A6010 (Android 5.0.2, 720 x 1280 pixels, 5.0 inch screen).

Samsung Tablet SM T113 (Android 4.4.4, 600 x 1024 pixels, 7.0 inch screen).

Screen Shot of devices where the function works well

但是,当我在装有 Android Nougat(7.0、7.1.1)的设备上运行相同的程序时,我的 ListView 的最后一项下方出现了空白。也就是设置的高度超过了要求。

下面的屏幕截图解释了我所面临的情况。 enter image description here下面列出了出现此问题的设备:-

Moto E4 Plus (Android - 7.1.1, 720 x 1280 pixels, 5.5 inch screen).

Moto E5 Plus (Android - 7.0, 1080 x 1920 pixels, 5.2 inch screen).

下面是我对 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" />

谁能帮我解决我面临的问题。

提前致谢。

最佳答案

我找到了我面临的问题的解决方案。

对我来说,解决方案在于我用于 ListView 的适配器的项目列表。

我正在使用 LinearLayoutweight以及我给 LinearLayout 中的小部件 weightsum连同一些marginViews .现在,由于整个 View 除以权重和 View ,额外的边距在我的 ListView 底部创建了那些空白区域。发布的问题中显示的属性。我替换了 LinearLayoutRelativeLayout并删除了 weight来自 ViewGroup 的属性和 weightSum我的 View 的属性.

它对我很有用。

对于那些面临同样问题的人,我发布下面的 xml 文件以供引用:

用于 ListView 项目 UI 的旧 item_list.xml 文件:

<?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并且不使用 weightweightSum属性:-

<?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>

希望我的回答能帮到遇到同样问题的人...

关于android - 基于项目设置 ListView 高度在 Android Nougat 设备的末尾提供额外的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47152088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com