gpt4 book ai didi

android - AlertDialog 中的 ListView,阻止它改变对话框的高度

转载 作者:行者123 更新时间:2023-11-30 03:16:07 25 4
gpt4 key购买 nike

我已经为我的 AlertDialog 设置了自定义 View ,其中包含 EditText 和 ListView。 EditText 充当列表的过滤器。现在,当用户过滤列表时,整个对话框会根据列表的内容调整大小。我怎样才能将列表设置为基于屏幕尺寸的固定高度,这样它就不会调整大小?例如,让列表始终占据屏幕高度的 40%。我试过举重,但没有用。这是我目前拥有的。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="@dimen/activity_vertical_margin" >

<EditText
android:id="@+id/EditSearch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_search" />

<ListView
android:id="@+id/list1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

最佳答案

对话框将其内容缩小到非常低的级别。在创建对话框后,我尝试将所有顶级 View 的高度设置为 MATCH_PARENT,但它仍然没有改变任何东西。因此,让我们尝试一种不同的方法。一个常见的方法是监听窗口何时使用 ViewTreeObserver 进行布局(对话框有自己的窗口)。因此,假设您的 ListView 有足够的项目来最初将对话框增大到允许的最大尺寸,我们将把它的布局高度更改为一个常量。然后,当它的适配器内容改变时,它不会收缩。

在你的 DialogFragment 的 onStart 方法中,这个技巧应该发生。

        val list = dlog.dialog.findViewById(R.id.results)
list.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
if (list.height > 0) {
list.layoutParams.height = list.height
list.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
}
})

关于android - AlertDialog 中的 ListView,阻止它改变对话框的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20102563/

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