【问题标题】:Android Custom PopupWindow/DialogAndroid 自定义 PopupWindow/Dialog
【发布时间】:2023-03-12 21:51:01
【问题描述】:

我正在尝试获得一个完全自定义的 Dialog 或 PopupWindow,没有任何默认的 Android UI 控件(标题、背景、按钮等)。

这可能吗?我花了几个小时寻找这个,但没有运气......看起来这应该很容易实现,但我找不到。

最好是通过从 XML 扩展视图来实现,但在这一点上,任何可以正常工作的东西都会很好。

谢谢。

【问题讨论】:

标签: android dialog skinning popupwindow


【解决方案1】:

我采取的步骤:

  1. 创建一个扩展Dialog的类。
  2. 在 onCreate 中,调用 setContentView(x, y),x 是您的 R.layout,y 是 R.style.popupStyle(见下文)。
  3. 在您的 res/values/style.xml 中,您需要覆盖默认的 DialogWindow 样式。我尝试制作一种以该样式为父样式的样式,但这仍然没有清除所有默认值。所以我检查了 Android git 树并得到了默认样式,然后复制粘贴了它。就是这个:

您会遇到一些错误,只需从官方 Android 的 styles.xml 和 Themes.xml 文件中复制更多内容即可解决这些错误。这是我的 styles.xml 文件的内容:http://pastebin.com/RRR15YYS

这只是给你一个白色的弹出窗口,没有边框,什么都没有。开始定制。 :)

感谢 mbaird 让我走上正轨。

[edit] 我需要再次查找我自己的答案,我花了至少十分钟搜索官方的 android 样式/主题文件,所以在这里,以供将来参考: styles.xml 和 themes.xml。

【讨论】:

  • @benvd - 我按照您的步骤操作,并且能够从我自己的代码中获得与 android 完全相同的对话框主题。但我的问题是重新定位对话框。我希望它被放置在说(x,y)的位置。我正在尝试使用布局边距。但随后在 Dialog.java (framework/base/core/java/android/app) 的第 143 行 (android 1.6) 我看到一行 w.setGravity(Gravity.CENTER);。这会阻止我的保证金吗?因为我只是无法将它定位在我想要的位置。我添加边距的那一刻,事情就搞砸了。
  • 作为参考,我尝试了这种方法,但发现步骤有点混乱(尽管非常有用)。我已经完成了类似的结果,而无需创建扩展 Dialog 类的类。我的方法在这里:stackoverflow.com/questions/3728990/…
  • 避免编译错误
  • 只有setContentView(View视图,ViewGroup.LayoutParams params)。您在哪里找到具有两个 View 参数的?
【解决方案2】:

听起来您正在尝试真正自定义AlertDialog。对于您想要做的事情,您最好创建自己的扩展 Dialog 的类,类似于通过编写扩展 Activity 的类来创建活动的方式。

您可以通过在自定义 Dialog 类的 onCreate() 方法中调用 setContentView() 来设置布局 XML,就像在 Activity 中一样。

过去,我在自定义 AlertDialogs 的数量方面遇到了限制,我刚刚实现了自己的 Dialog 类以获得所需的自定义级别。

【讨论】:

  • 这仍然给了我系统背景和边框(就像这里的屏幕截图:developer.android.com/guide/topics/ui/dialogs.html#CustomDialog)。有没有办法禁用这些?我只想要我的观点——只有我的观点。我会负责绘制背景和其他所有工作。
  • 除非你覆盖它,否则你总是会得到默认的布局主题。为此,当您实例化自定义对话框类时,调用带有 2 个参数的 Dialog 构造函数,并将自定义主题作为第二个参数传递。
  • 是的,我刚刚想通了。我不得不跳更多的圈子才能得到我想要的东西。我会在一秒钟内发布完整的答案。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 2022-10-18
相关资源
最近更新 更多