【问题标题】:Adding border to dialog window in android在android中为对话框窗口添加边框
【发布时间】:2018-03-26 18:32:33
【问题描述】:

我正在尝试为 Android 中的对话框窗口添加边框。使用带有以下几行的可绘制对象为对话框窗口添加了圆角

<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>

但这会在对话框中的每个元素周围创建一个边框,例如文本视图、图标、按钮。我只想要窗口的轮廓边框。

我已经使用 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>

请帮助我了解我应该进行哪些更改才能显示警报对话框边框。

谢谢

【问题讨论】:

    标签: android dialog window border alert


    【解决方案1】:

    通过对代码进行以下更改,我能够解决警报对话框的边框问题。

    我没有在创建对话框时指定主题,而是在 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 方法来创建它,尽管它也可以使用自定义布局文件并设置视图来完成。

    【讨论】:

      【解决方案2】:

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

      • 在styles.xml 中定义您的MyDialogStyle:
        &lt;item name="android:background"&gt;@drawable/my_rounded_background&lt;/item&gt;

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

      • 在您的 Dialog 类 onCreate 添加:

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

      【讨论】:

      • 感谢您的回复。我已经添加了您提到的三件事,但唯一的区别是我在代码中创建警报对话框,而不是使用自定义布局。这就是它不起作用的原因吗?
      • 如果您仍在使用“myDialogBu​​ilder = new AlertDialog.Builder(..)”,那么您没有创建自定义对话框,并且您为自定义对话框创建的类什么也不做,因为您没有使用它.将其更改为“myDialog = new MyCustomDialog()”或任何您调用的自定义对话框类。创建自定义对话框意味着创建一个扩展 Dialog Android 类的 Java 类。
      • 我认为对于 api 11 及更高版本,我们可以使用 AlertDialog.Builder 创建具有自定义样式的警报对话框。请检查此链接stackoverflow.com/questions/14770400/…。我已经能够为警报对话框设置背景颜色和圆角,但只有笔画不起作用。当我在可绘制文件中添加形状中的笔划时,会为标题、按钮、消息和警报对话框中的所有内容显示圆角边框。我只需要一个用于警报对话框的轮廓边框。
      • 自定义样式不代表自定义Dialog。如果您使用 AlertDialog.Builder,则您不是在使用自定义对话框,而是在使用标准对话框。自定义对话框的构造类似于具有 Java 类和 XML 布局的 Activity,这就是我用于圆角对话框的内容。你说的链接上的解决方案真的很复杂,很奇怪,在 cmets 中有人说这对他不起作用。
      猜你喜欢
      • 1970-01-01
      • 2018-04-22
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      相关资源
      最近更新 更多