首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表视图动态项高度

列表视图动态项高度
EN

Stack Overflow用户
提问于 2017-02-10 06:29:51
回答 2查看 560关注 0票数 0
代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:baselineAligned="false"
    android:orientation="horizontal"
    android:weightSum="100"
    android:background="@drawable/round_shape"
    android:descendantFocusability="blocksDescendants"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="25">
    <TextView
        android:text="Title"
        android:paddingStart="20dp"
        android:ellipsize="end"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/borrowBookTitle"
        android:maxLines="1"
        android:textSize="25sp"
        android:textColor="#000000"
        />
    <TextView
        android:text="Locate"
        android:paddingStart="20dp"
        android:ellipsize="end"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/locate"
        android:maxLines="2"
        android:textSize="15sp"
        android:textColor="#838383"
        />
    <TextView
        android:text="borrowStartDate"
        android:layout_marginStart="10dp"
        android:layout_marginEnd="5dp"
        android:layout_marginTop="8dp"
        android:paddingStart="10dp"
        android:paddingEnd="20dp"
        android:paddingBottom="5dp"
        android:layout_width="wrap_content"`enter code here`
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:id="@+id/borrowStartDate"
        android:maxLines="1"
        android:textSize="17sp"
        android:textColor="#000000"
        android:background="@color/childview_background"
    />
    <TextView
        android:text="borrowEndDate"
        android:layout_marginStart="10dp"
        android:layout_marginEnd="10dp"
        android:paddingStart="10dp"
        android:paddingEnd="20dp"
        android:paddingBottom="5dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/borrowEndDate"
        android:visibility="gone"
        android:maxLines="1"
        android:textSize="17sp"
        android:textColor="#000000"
        android:background="@color/childview_background"
        />
</LinearLayout>
<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="75">

    <TextView
        android:text="D-11"
        android:paddingStart="5dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/borrowDday"
        android:textSize="35sp"
        android:textColor="#000000"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/button1"
        android:id="@+id/renewBtn"
        android:textSize="20sp"
        android:textColor="#000000"
        android:visibility="gone"
        android:text="RENEW"
        />
</LinearLayout>

上面的xml文件是Listview's项xml文件。borrowStartDateborrowEndDaterenewBtn的视觉消失了。但是当单击项目时,更改为可见。

代码语言:javascript
复制
borrowListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
                    @Override
                    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                        TextView startDate = (TextView)view.findViewById(R.id.borrowStartDate);
                        TextView endDate = (TextView)view.findViewById(R.id.borrowEndDate);
                        Button renewBtn = (Button)view.findViewById(R.id.renewBtn);
                        if ( startDate.getVisibility() == View.GONE) {
                            startDate.startAnimation(AnimationUtils.loadAnimation(view.getContext(), R.anim.slide_down_and_fade_in));
                            endDate.startAnimation(AnimationUtils.loadAnimation(view.getContext(), R.anim.slide_down_and_fade_in));
                            renewBtn.startAnimation(AnimationUtils.loadAnimation(view.getContext(), R.anim.fade_in));

                            startDate.setVisibility(View.VISIBLE);
                            endDate.setVisibility(View.VISIBLE);
                            renewBtn.setVisibility(View.VISIBLE);
                        }
                        else {
                            startDate.setVisibility(View.GONE);
                            endDate.setVisibility(View.GONE);
                            renewBtn.setVisibility(View.GONE);
                        }
                    }
                });

是变化的可见代码

问题是,当项目消失时,Listview高度与匹配,所以当我单击每个项目时,没有直接显示在部件下面。

我想在点击项目时,Listview高度自动展开

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:fillViewport="true">
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin">
        <WebView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:visibility="gone"
            android:id="@+id/rightWebView"
            />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Refresh"
            android:backgroundTint="@color/button1"
            android:drawableEnd="@drawable/refresh_picto"
            android:id="@+id/refreshBorrowBook"
            android:onClick="refreshBorrow"
            android:layout_marginBottom="10dp"
            />

        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/borrowBookList"
            android:dividerHeight="10dp"
            android:divider="@color/main_background"
            />
        <TextView
            android:text="예약 목록"
            android:paddingStart="50dp"
            android:visibility="gone"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="20dp"
            android:textColor="#000000"
            android:textSize="25sp"
            android:background="@drawable/round_shape"
            android:backgroundTint="@color/childview_background"
            android:id="@+id/reservation_list_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/reservationBookList"
            android:dividerHeight="10dp"
            android:divider="@color/main_background"
            />
    </LinearLayout>
</ScrollView>

这是片段代码

添加快照

单击“刷新”按钮后的刷新后按钮

单击项目时的单击项目时

如果向下滚动,则显示listview的其他部分

我不想滚动。

就在单击items时,listview自动获得高度。

我认为这个问题与notifyDataSetChanged();无关

EN

回答 2

Stack Overflow用户

发布于 2017-02-10 07:12:35

使用

代码语言:javascript
复制
view.getLayoutParams().Height=value

你不需要切换能见度,顺便说一句,希望有帮助

票数 0
EN

Stack Overflow用户

发布于 2017-02-10 08:39:41

下面的方法计算每个子视图的高度,您必须在按下列表视图中任何子视图的按钮后调用下面的方法,使之可见和不可见。

代码语言:javascript
复制
public class Utility {
        public static void setListViewHeightBasedOnChildren(ListView listView) {
            ListAdapter listAdapter = listView.getAdapter();
            if (listAdapter == null) {
                // pre-condition
                return;
            }

            int totalHeight = 0;
            int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST);
            for (int i = 0; i < listAdapter.getCount(); i++) {
                View listItem = listAdapter.getView(i, null, listView);
                listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
                totalHeight += listItem.getMeasuredHeight();
            }

            ViewGroup.LayoutParams params = listView.getLayoutParams();
            params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
            listView.setLayoutParams(params);
            listView.requestLayout();
        }
    }

在更改ListView项后立即调用此函数,如下所示:

代码语言:javascript
复制
Utility.setListViewHeightBasedOnChildren(myListView);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42152866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档