为AlertDialog添加边框

3
我正在尝试为警告对话框添加边框,希望它看起来像这样:
最好的解决方案是使用九宫格可拉伸图片作为对话框的背景。
但问题在于我还没有找到一种方法来制作一个九宫格背景,能够给对话框一个一致的白色线条。这是目前我找到的最佳方案(很抱歉有点难以看清...):
问题在于这会产生这样的对话框:
这里有两个问题; 侧边的线条太粗了,顶部的线条被阴影淡化了。
我唯一的想法是要么找到一个可以给出一致粗细边框的九宫格,要么找到一种获取警告对话框“主布局”的方法,这样我就可以直接添加填充。
如何设置类似这样的警告对话框边框的最佳方法是什么?
2个回答

6
问答者的回答非常接近我想要的,但仍然留下了一个我不感兴趣的大黑线围绕对话框。
我从图层列表中删除了一个图层,并自定义了白色边框的填充。我还没有像评论中建议的那样将背景设置为透明。
如果你仔细看3.0+,你会看到一些圆角像素,这是为了使背景具有对话框上相同的曲线边缘而添加的形状。
drawable文件夹中的dialog_border.xml文件中,我有以下内容:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="6dp"
        android:left="13dp"
        android:right="13dp"
        android:bottom="6dp">
        <shape android:shape="rectangle" >
            <solid android:color="@color/offWhite" />

            <corners
                android:radius="3dp"/>
        </shape>
    </item>
</layer-list>

我的风格是这样的:

<style name="DialogTheme" parent="android:Theme.Holo.Dialog">
    <item name="android:windowBackground">@drawable/dialog_border</item>
</style>

尽管可能需要在程序中设置而不是在样式中设置,但这是可以实现的。

2
在您的对话框的xml文件中,为顶层视图设置以下背景:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/white"/>
    <item
        android:bottom="1dp"
        android:drawable="@color/black"
        android:left="1dp"
        android:right="2dp"
        android:top="2dp">
    </item>
</layer-list>

您可以自定义每个侧面的边框宽度。


谢谢,这种方法看起来很有前途...但是我怎么才能让边框只有1-2dp宽呢?对话框和白色边框之间仍然有一个巨大的黑色空隙。 - jcw
@jcw 你试过将这个drawable设置为你的背景吗?你可以自由地定制边框的宽度。如果对话框样式中有任何伪像,请在你的on构造函数或onCreateDialog中尝试这个:getWindow().setBackgroundDrawableResource(android.R.color.transparent); - questioner
是的,我将其设置为我的对话框的背景,但它与我问题中的图像有相同的问题(除了边框的一部分是黑色)。有一个15-20dp宽的黑色边框,我正在尝试摆脱,然后是我想要的细白线。将背景设置为透明不是我想做的事情;我要做的是得到一个带有白色边框的普通对话框...感谢迄今为止的帮助。 - jcw
我对你提供的图层列表进行了一些调整,最终使其正常工作(请参见我的答案)。再次感谢你的所有帮助。 - jcw
@jcw,你能否尝试从应用程序主题中删除/注释掉dialogStyledialogTheme,看看是否可以去除白色额外边框?我注意到,当这个属性被删除并在对话框的onCreateDialog()中以编程方式设置主题时,可以解决不想要的白色边框问题。请告诉我结果。 - questioner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接