gpt4 book ai didi

android - ListView 标题忽略 layout_height

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:17:11 25 4
gpt4 key购买 nike

我膨胀这个 View ,并将它作为标题添加到我的 ListView 中。我试图将其设置为 500dp 高(硬编码,为了这个例子)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"
android:layout_width="match_parent" android:background="@drawable/repeat_background"
android:layout_height="500dp">

<ImageView android:id="@+id/filter_menu" android:src="@drawable/ic_sort"
android:layout_gravity="center_vertical" android:padding="8dp"
android:layout_weight="0"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:onClick="showPopup"/>

</LinearLayout>

ListView 不尊重其 header 的权威性并将其包装在其内容上。谁能解释一下发生了什么?

最佳答案

了解正在发生的事情的关键是弄清楚 ListView 页眉和页脚是如何实现的。它们是一个技巧:当您将第一个页眉或页脚添加到您的 ListView 时,您的 ListAdapter 被包裹在一个 HeaderViewListAdapter 中。 (发生在 line 270 of ListView.java 上)。 HeaderListViewAdapter 是一个调整 count 的列表适配器和 position包含页眉和页脚的值;页眉和页脚成为系统为您管理的正常列表项。

如果你看line 207 of HeaderListViewAdapter.java ,你会看到 getView实现忽略了 parent添加页眉或页脚时查看。这具有其 mLayoutParams 的效果不会从 XML 初始化(不能真正指向源代码,只是我随着时间的推移发现的东西)。

如果您随后调用电话 getView过去一点line 2237 of AbsListView.java , 然后按照 obtainView 的调用搜索一下 LayoutParams (这就是我刚刚所做的)你最终在 line 1182 of ListView.java .在这里你可以看到,如果布局参数是 null当测量 subview 时,它会调用 generateDefaultLayoutParams() ,在 line 6065 of AbsListView.java 上实现:

@Override
protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
return new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 0);
}

...这就是你的 WRAP_CONTENT来自。

作为一种简单的解决方法,只需包装 <LinearLayout/><FrameLayout/> 中的 XML .保持 LinearLayout 的 500dp 并使 FrameLayout 的布局高度为 WRAP_CONTENT(无论如何都会被忽略)。

关于android - ListView 标题忽略 layout_height,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25811570/

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