在安卓中给对话框窗口添加边框

4

我正在尝试为Android上的对话框窗口添加边框。使用以下代码向对话框窗口添加了带有圆角的drawable:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:left="5dp"
        android:right="5dp"
        android:bottom="5dp"
        android:top="5dp">
    <shape android:shape="rectangle">
        <solid android:color="#ffbf80" />
        <corners android:radius="30dp" />
        <padding
        android:left="1dp"
        android:top="1dp"
        android:right="1dp"
        android:bottom="1dp" />
    </shape>
    </item>
</layer-list>

为了给对话框添加边框,我尝试添加如下所示的描边元素。
<shape android:shape="rectangle">
    <solid
    android:color="#ffbf80" />
    <stroke android:color="#ff3300" android:width="2dp"/>
    <corners
    android:radius="30dp" />
    <padding
    android:left="1dp"
    android:top="1dp"
    android:right="1dp"
    android:bottom="1dp" />
</shape>

但是这样会在对话框中的每个元素(如TextView、图标、按钮等)周围创建一个边框。我只想要窗口的轮廓边框。
我已经使用AlertDialog.Builder在Java代码中创建了警告对话框。
myDialogBuilder=new AlertDialog.Builder(new 
ContextThemeWrapper(getActivity(), 
R.style.CustomDialog))
.setTitle(title.getText().toString())
.setMessage(myText)
.setPositiveButton("Done", new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int which)
              {
                 getDialog().dismiss();
              }
              });

myDialog=myDialogBuilder.create();

myDialog.setOnShowListener(new DialogInterface.OnShowListener() {
                @Override
                public void onShow(DialogInterface dialog) {
                    Window view=((AlertDialog)dialog).getWindow();
                    view.setBackgroundDrawable(new 
                    ColorDrawable(Color.TRANSPARENT));
                ...
                }
 });

我在styles.xml中有以下内容,用于对话框:
 <style name="CustomDialog" parent="@style/ThemeOverlay.AppCompat.Dialog">
    <item name="android:backgroundDimEnabled">true</item>
    <item name="android:background">@drawable/dialog_bg</item>
    <item name="android:textColorPrimary">@color/my_textcolor</item>
</style>

请帮助我理解应该做出哪些更改,以便显示警告对话框边框。

谢谢。

2个回答

5
我能够通过对代码进行以下更改来解决我的警告对话框的边框问题。
在创建对话框时不再指定主题,而是通过在dialog.setOnShowListener()中为对话框窗口添加可绘制资源。
Window view=((AlertDialog)dialog).getWindow();
view.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
// to get rounded corners and border for dialog window
view.setBackgroundDrawableResource(R.drawable.dialog_bg);

我只需要在我的提示对话框中一个标题、一条消息和一个按钮。所以我使用标准的AlertDialog.Builder方式创建它,尽管也可以使用自定义布局文件并设置视图来完成它。


0

我在我的应用程序中使用了圆角对话框,但是我使用自定义对话框和自定义布局而不是标准的AlertDialog,当然需要更多的工作。

  • 在styles.xml中定义您的MyDialogStyle:
    <item name="android:background">@drawable/my_rounded_background</item>

  • 在对话框布局xml的根项中添加属性:
    style="@style/MyDialogStyle"

  • 在您的Dialog类onCreate中添加:

getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));


谢谢您的回复。我已经添加了您提到的三个内容,但唯一的区别是我在代码中创建警报对话框,而不是使用自定义布局。这就是它不起作用的原因吗? - Sri
如果你仍在使用 "myDialogBuilder = new AlertDialog.Builder(..)",那么你并没有创建自定义对话框,而且你为自定义对话框创建的类也没有任何作用,因为你没有使用它。请将其更改为 "myDialog = new MyCustomDialog()" 或者你所称呼的自定义对话框类名。创建自定义对话框意味着创建一个扩展 Dialog Android 类的 Java 类。 - from56
我认为对于API 11及以上版本,我们可以使用AlertDialog.Builder创建具有自定义样式的警报对话框。请查看此链接https://dev59.com/wG7Xa4cB1Zd3GeqPnTq6。 我已经能够为警报对话框设置背景颜色和圆角,但仅边框不起作用。当我在drawable文件中的形状中添加描边时,标题、按钮、消息以及警报对话框中的所有内容都显示为圆角边框。我只需要一个警报对话框框架的单个轮廓边框。 - Sri
自定义样式并不意味着自定义对话框。如果您使用AlertDialog.Builder,则不是在使用自定义对话框,而是在使用标准对话框。自定义对话框类似于Activity与Java类和XML布局构建,这就是我用于圆角对话框的方法。您提到的链接解决方案真的非常复杂、奇怪,而且在评论中有人说它对他不起作用。 - from56

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