gpt4 book ai didi

android - 在 AlertDialog 中控制 View 大小

转载 作者:行者123 更新时间:2023-11-30 02:10:12 24 4
gpt4 key购买 nike

我想创建一个 AlertDialog 作为一个 DialogFragment,带有一个标题、一个确定按钮、一个取消按钮和一个 ExpandableListView。问题在于 ExpandableListView 会占用尽可能多的空间,并将按钮和标题推出对话框。我想要的是顶部的标题、底部的按钮和 ExpandableListView 占用所有剩余空间,直至全屏,这样 DialogFragment 就可以了展开时不会增大/减小尺寸,而是保持其可滚动。

这是描述情况的图片,左边的是初始化的 DialogFragment,第二个是展开 ExpandableListView 的一个部分之后。别介意丑陋。

ExpandableListView expands too much.

我想实现以下目标:

  1. 保持 FragmentDialog 的大小固定,最好是整个窗口 (fill_parent/match_parent)。
  2. 保持按钮固定在底部,标题固定在顶部,ExpandableListView 固定(但仍可滚动)在中心。

我已经尝试了很多不同的东西,但这是我目前的做法。

自定义DialogFragment

public class RecipeFilterDialogFragment extends DialogFragment {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.recipe_filter_title);
builder.setPositiveButton(R.string.recipe_filter_button_ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// TODO: Perform filtering, fill list and return.
}
});
builder.setNegativeButton(R.string.recipe_filter_button_cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// TODO: Kill dialog and return.
}
});

builder.setView(getActivity().getLayoutInflater().inflate(R.layout.recipe_filter_dialog, null));
builder.setCancelable(true);
return builder.create();
}

@Override
public void onStart() {
super.onStart();
AlertDialog dialog = (AlertDialog) getDialog();
if (dialog != null)
{
int width = ViewGroup.LayoutParams.MATCH_PARENT;
int height = ViewGroup.LayoutParams.MATCH_PARENT;
//dialog.getWindow().setLayout(width, height);
dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}
}

DialogFragment 的 xml 文件 (recipe_filter_dialog.xml)

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

<com.my.app.RecipeFilterExpandableListView
android:id="@+id/recipe_filter_expandableListView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

</LinearLayout>

自定义的ExpandableListView

public class RecipeFilterExpandableListView extends ExpandableListView {

public RecipeFilterExpandableListView(Context context, AttributeSet attrs)
{
super(context, attrs);
this.setOnGroupExpandListener(new RecipeFilterDialogOnGroupExpandListener(this));

// This adapter just fills the ExpandableListView, nevermind it.
this.setAdapter(new RecipeFilterExpandableListAdapter(context, ((MyActivity)context).getDbFilter()));
}
}

最佳答案

尝试设置 builder.setTitle(R.string.recipe_filter_title); 而不是 builder.setMessage(R.string.recipe_filter_title); 并决定什么高度和宽度你想要你的 Dialog 并在 onStart() 方法中设置它。

也尝试做这样的事情:

对话框类中的构造函数:

 public RecipeFilterDialogFragment () {
setStyle(DialogFragment.STYLE_NO_FRAME, R.style.FullscreenStyle);
}

上面使用的这个对话框的样式:

<style name="FullscreenStyle" parent="@android:style/Theme.Holo.Light">
<item name="android:windowIsFloating">false</item>
<item name="android:windowFullscreen">true</item>
</style>

还尝试使用父样式作为对话框主题 f.e:

<style name="FullscreenStyle" parent="@android:style/Theme.Holo.Light.Dialog">

关于android - 在 AlertDialog 中控制 View 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30222343/

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