Android自定义弹出窗口/对话框

Android自定义弹出窗口/对话框,android,dialog,skinning,popupwindow,Android,Dialog,Skinning,Popupwindow,我试图得到一个完全定制的对话框或弹出窗口,没有任何默认的Android UI控件(标题、背景、按钮等等) 这可能吗?我花了好几个小时寻找这个,但没有运气。。。这似乎很容易做到,但我找不到 这最好是通过从XML扩展视图,但在这一点上,任何可以正常工作的东西都会很好 谢谢。听起来您正在尝试真正定制一个。对于您想要做的事情,您最好只创建自己的扩展类,类似于通过编写扩展类来创建活动 可以通过在自定义对话框类的onCreate()方法内调用setContentView()来设置布局XML,就像在活动中一样

我试图得到一个完全定制的对话框或弹出窗口,没有任何默认的Android UI控件(标题、背景、按钮等等)

这可能吗?我花了好几个小时寻找这个,但没有运气。。。这似乎很容易做到,但我找不到

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


谢谢。

听起来您正在尝试真正定制一个。对于您想要做的事情,您最好只创建自己的扩展类,类似于通过编写扩展类来创建活动

可以通过在自定义对话框类的onCreate()方法内调用setContentView()来设置布局XML,就像在活动中一样

过去,我在自定义AlertDialogs方面遇到了一些限制,我刚刚实现了自己的对话框类,以获得所需的自定义级别。

我采取的步骤:

  • 创建一个扩展类
  • 在onCreate中,调用
    setContentView(x,y)
    ,其中
    x
    为您的R.layout,
    y
    为R.style.popupStyle(见下文)
  • 在res/values/style.xml中,需要覆盖默认的DialogWindow样式。我试着制作一个将此样式作为其父样式的样式,但仍然没有清除所有默认值。所以我检查了Android git树,得到了默认样式,然后复制粘贴了它。这是一个:
  • @空的 @android:style/DialogWindowTitle @android:可绘图/面板背景 真的 @空的 @android:style/Animation.Dialog 状态未指定|调整盘 您会遇到一些错误,只需从官方的Android styles.xml和themes.xml文件中复制更多内容即可解决这些错误。以下是my styles.xml文件的内容:

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

    感谢mbaird让我走上正轨

    [编辑]我需要再次查找我自己的答案,我花了至少十分钟的时间搜索官方android样式/主题文件,它们就在这里,供将来参考:
    而且。

    这仍然给我提供了系统背景和边框(就像这里的屏幕截图:)。有没有办法禁用这些功能?我只想要我的观点,除了我的观点什么都不要。我将负责绘制背景和所有其他内容。除非覆盖默认布局主题,否则您将始终获得默认布局主题。要做到这一点,当你实例化你的自定义对话框类时,调用包含两个参数的对话框构造函数,并传递一个自定义主题作为第二个参数。我必须再多跳几圈才能得到我想要的。我马上把完整的答案贴出来。非常感谢。@benvd-我遵循了你的步骤,并且我能够从我自己的代码中获得与android完全相同的对话框主题。但我的问题是重新定位对话框。我想把它放在(x,y)位置。我试着用版面边距来做这个。但是在Dialog.java(framework/base/core/java/android/app)的第143行(android1.6),我看到一行
    w.setGravity(Gravity.CENTER)。这会阻止我的保证金吗?因为我就是不能把它放在我想要的地方。我一加上保证金,事情就搞砸了。作为参考,我尝试了这种方法,但发现步骤有点混乱(尽管非常有用)。我在不必创建扩展Dialog类的类的情况下实现了类似的结果。我的方法是:为了避免编译错误,只有setContentView(视图视图,ViewGroup.LayoutParams参数)。您在哪里找到具有两个视图参数的视图?这可能会有所帮助
    <style name="Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowTitleStyle">@android:style/DialogWindowTitle</item>
        <item name="android:windowBackground">@android:drawable/panel_background</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    </style>