我的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>
答案 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%
}
希望你明白了,这就是你要找的东西