我正在尝试制作一个弹出窗口,该窗口会在我的应用程序中单击按钮时膨胀,显示一个由适配器填充的 ListView 。目前,我正在使用 DialogFragment,它工作正常。但我希望能够调整对话框的大小,最好是调整对话框的位置。
经过一些研究,PopupWindow 允许您调整框的大小和位置,但它不能很好地在其 View 中实例化 fragment 。 DialogFragment 非常适合使用 fragment 和 ListView ,但据我所知,您无法控制它的大小和位置。
有没有人在创建动态弹出窗口方面有类似的情况或经验?
最佳答案
要更改 DialogFragment 的大小,我使用 OnCreateView 方法执行了以下操作
注意:MonoDroid 的 C# 代码;轻松翻译成原始 Android 的 Java
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
View thisView = inflater.Inflate(Resource.Layout.NewContactDialog, container, false);
thisView.Post(() =>
{
ViewGroup.LayoutParams lp = thisView.LayoutParameters;
lp.Width = 500;
thisView.LayoutParameters = lp;
thisView.Invalidate();
}
);
return thisView;
}
此代码来自实验。我选择的只是使用居中的 DialogFragment(默认行为)并取消背景调暗。您可以覆盖 DF 的样式,并基于现有主题
<style name="MyDialogFragment" parent="android:Theme.Holo.Dialog">
<item name="android:windowIsFloating">true</item>
</style>
或者完全从头开始设计
<style name="MyDialogFragment">
... (set all items, check docs)
</style>
开始尝试使用上面的 MyDialogFragment 样式并将 windowIsFloating 设置为 false 并查看效果(只需使用 SetStyle 成员将您的主题设置为此)。
样式和主题的一些很好的链接,您需要进行自己的样式设置和覆盖默认设置:
http://www.therealjoshua.com/2012/01/styling-android-with-defaults/
http://developer.android.com/guide/topics/ui/themes.html/
老实说,使用 DialogFragments 和 PopupWindows 很痛苦,但它们是解决一些实际 GUI 问题的专用 View ,所以不要放弃。如果您需要更多信息,请在下面的评论中提问(我知道这不是答案,我只是想提供帮助,因为我现在正在研究这些东西)。
关于Android PopupWindow 与 DialogFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13827138/