Android PopupWindow 与 DialogFragment

标签 android android-fragments android-dialogfragment

我正在尝试制作一个弹出窗口,该窗口会在我的应用程序中单击按钮时膨胀,显示一个由适配器填充的 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/

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/styles.xml/

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml/

老实说,使用 DialogFragments 和 PopupWindows 很痛苦,但它们是解决一些实际 GUI 问题的专用 View ,所以不要放弃。如果您需要更多信息,请在下面的评论中提问(我知道这不是答案,我只是想提供帮助,因为我现在正在研究这些东西)。

关于Android PopupWindow 与 DialogFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13827138/

相关文章:

android - 如果在 OnCreateView 之外使用,findViewById 返回 null

android - 不兼容的 fragment 类型

Android:在 Linux 中调试 Samsung Galaxy Tab 10.1

Android Instant App 解析App失败

android - Chronometer 节省 fragment 更改时间

java - 在 fragment 中的 AsyncTask 中使用 Jsoup 获取网页元素(Android 新手)

android - DialogFragment setCancelable 属性不起作用

android - DialogFragment 中的 ViewPager 不会更改单击时的选项卡

java - 从Socket读取数据的问题

java - 如何在单击 TextView 中的文本链接时打开浏览器