android - 根据其中的多行 TextView 动态设置 ListView 高度

标签 android android-layout listview android-listview android-adapter

我正在使用基本适配器在 ListView 中动态设置数据。我试图动态设置 ListView 高度。如果其中的 TextView 是单行,它就可以完美地工作。但是,如果 textview 是多行的,则高度设置不正确。高度设置仅考虑单行 TextView 。如何正确设置包含多行 TextView 的 ListView 项目的高度。这是代码:

fragment 代码:

ListView mlistNews=(ListView)rootView.findViewById(R.id.news_listView);
mlistNews.setAdapter(new NewsAdapter(getActivity(),params_news));
Utils.setListViewHeightBasedOnItems(mlistNews);

效用函数:

public static boolean setListViewHeightBasedOnItems(ListView listView) {

    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter != null) {

        int numberOfItems = listAdapter.getCount();

        // Get total height of all items.
        int totalItemsHeight = 0;
        for (int itemPos = 0; itemPos < numberOfItems; itemPos++) {
            View item = listAdapter.getView(itemPos, null, listView);
            item.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 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;
        listView.setLayoutParams(params);
        listView.requestLayout();

        return true;

    } else {
        return false;
    }

}

dashboard_list_news.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp">
<TextView
    android:layout_width="0dp"
    android:id="@+id/news_item_text"
    android:layout_weight="1"
    android:layout_height="wrap_content"
    android:layout_gravity="left|center_vertical"
    android:layout_marginLeft="5dp"/>

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/chevron"
    android:layout_gravity="center_vertical|right"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="10dp" />

</LinearLayout>

ListView :

<ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/rounded_shape_list"
            android:id="@+id/news_listView"
            android:paddingTop="5dp"
            android:paddingBottom="5dp"
            android:divider="#6DCB99"
            android:dividerHeight="1dp" />

最佳答案

正如 Teemu 提到的,您需要限制宽度。下面的示例代码。

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));

关于android - 根据其中的多行 TextView 动态设置 ListView 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29225539/

相关文章:

android - 如何绘制优步折线?

android-studio - 在Android Studio "Layout Captures"工具有什么用

swing - scala.swing.ListView : single/multiple selection

C# listview 可点击的列和行

Android Java 应用程序 Jsch 使用按钮发送命令

android - 为什么 Firebase 数据库安全规则不适用于经过身份验证的 REST API?

安卓发光边框

android - 从右到左增加 Android 按钮的宽度

android - 如何使用 SimpleCursorAdapter 使 ListView 跳过 ""文本?

android - 有时 listView.getChildAt(int index) 返回 NULL (Android)