ListView не может получить высоту. Изображение ImageView не определено по высоте - PullRequest
0 голосов
/ 29 апреля 2018

ImageView из веб-изображения, его высота масштабируется по ширине

ImageView

<?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="#fff"
    android:gravity="center"
    android:orientation="vertical">

    <ImageView
    android:id="@+id/iv_intro_img"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scaleType="fitCenter"
    android:src="@drawable/product_top"
    android:divider="@null"
    android:adjustViewBounds="true"/>
</LinearLayout>

ListView

<?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:orientation="vertical"
        android:layout_marginTop="10dp"
        android:background="#FFFFFF">

        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:id="@+id/lv_intro"
            android:divider="@null"></ListView>
    </LinearLayout>

Установить высоту ListView

public static void setListViewHeightBasedOnChildren(ListView listView, int basicsHeight,int plusItem) {
    int totalHeight = basicsHeight;
    ListAdapter adapter = listView.getAdapter();

    for (int i = 0; i < adapter.getCount(); i++) {
        View listItem = adapter.getView(i, null, listView);
        listItem.measure(0, 0);
        int itemheight=listItem.getMeasuredHeight();
        Log.e("ItemView"+i, "height" + itemheight);
        totalHeight += itemheight + plusItem;
    }
    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
    listView.setLayoutParams(params);
}

Но этот журнал печатал высоту 0 101

Я снова думаю об этом, добавить событие прослушивания ImageView, но все равно ничего не получаю Я все еще не могу получить высоту ImageView

@Override
public View getView(final int position, View convertView, ViewGroup viewGroup) {
    if (convertView == null) {
        convertView = View.inflate(mContext, R.layout.product_item_intro, null);
        iv_intro_img = convertView.findViewById(R.id.iv_intro_img);
    }
    String imgurl = datas.get(position); //+ "_500x500.jpg";
    RequestOptions myOptions = new RequestOptions()
        .fitCenter();

    Glide.with(mContext).load(imgurl).apply(myOptions).into(iv_intro_img);

    iv_intro_img.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int itemtHeight = iv_intro_img.getHeight();
            int itemtHeight2= iv_intro_img.getMeasuredHeight();
            Log.e("itemimageview" + position, "height" + itemtHeight + "," + itemtHeight2);
            iv_intro_img.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        }
    });
    return convertView;
}

Но пока нет. Я надеюсь, что вы можете помочь мне установить высоту ListView.

1 Ответ

0 голосов
/ 29 апреля 2018

попробуй это у меня сработало

Список данных вашего адаптера

lvMedical - ваш список просмотра

   int totalHeight = 0;
        for (int i = 0; i < list.size(); i++) {
            View listItem = listAdapter.getView(i, null, lvMedical);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = lvMedical.getLayoutParams();
        params.height = totalHeight + (lvMedical.getDividerHeight() * (lvMedical.getCount() - 1));
        lvMedical.setLayoutParams(params);
        lvMedical.requestLayout();
...