AlertDialog中的ListView,阻止它更改对话框的高度

时间:2013-11-20 17:18:17

标签: android

我的AlertDialog有一个自定义视图集,带有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>

2 个答案:

答案 0 :(得分:1)

对话框将其内容缩小到非常低的水平。在创建对话框后,我尝试将所有顶级视图的高度设置为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)
                }
            }
        })

答案 1 :(得分:0)

这里可以调整对话框的大小,

首先,您将XML扩展到视图并将其添加到对话框中。

然后您创建Rect并使Rect的大小等于屏幕大小。

然后更改创建的View,并使用类似于Rect大小的60%的公式调整大小,这实际上就是屏幕的大小。

这是一个代码您需要根据您的代码对其进行修改,因为您没有提供任何代码

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = inflater.inflate(R.layout.ads_dialog1, null);
            Your-Dialog.setContentView(view); //add the XML to your Dialog

// this if is an demonstration of 'if your device is a tablet` do the following...     
if ((getResources().getConfiguration().screenLayout &      Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL
                && density.densityDpi < DisplayMetrics.DENSITY_XHIGH )
        {
            Rect displayRectangle = new Rect(); // Create a Rect
            Window window = this.getWindow();
            window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle); // add the size of the screen to the Rect
            view.setMinimumWidth((int)(displayRectangle.width() * 0.60f)); // give the dialog a width of 60% of the screen size
            view.setMinimumHeight((int)(displayRectangle.height() * 0.50f)); // give the dialog a height of 50%
        }

希望你明白了,这就是你要找的东西