android - 如何更改 Android 对话框边距(到屏幕边缘的距离)?

标签 android dialog android-alertdialog material-design

我一直在寻找一种简单明了的方法来更改我的 AlertDialog 边距,但没有成功。更清楚地说,我想要的是更改对话框每一侧与屏幕侧/边缘之间的距离。我希望我的对话框与出现在 Material Design specification

这是我希望/期望从一个简单的 android AlertDialog 得到的图像,在右侧,我实际看到的是下面的代码。

这是我的代码。

AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(message);
builder.setTitle(title);
builder.setPositiveButton(positiveId, positiveListener);
builder.show();

在您跳转到以编程方式设置对话框的 LayoutParams 的明显答案之前,让我说我知道我可以做这样的事情并且逃脱它。

final AlertDialog dialog = builder.create();
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
float dialogWidth = width - TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2 * SIDE_MARGIN_IN_DPS, r.getDisplayMetrics());

WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = (int) dialogWidth;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
dialog.getWindow().setAttributes(lp);
dialog.show();

但我不敢相信没有更简单、更清晰的方法来实现这一点,而且每次我们想要打开一个AlertDialog 时,我们都应该这样做。我尝试为应用于对话框的样式设置边距,但要么它没有做任何事情,要么它改变了对话框的内部边距(内容和对话框的侧面/边缘之间的边距)。我想我看错了样式。

有人遇到过同样的问题吗?关于如何在样式中而不是在代码中设置此边距有什么想法吗?

更新:

这是我的应用风格/主题:

<style name="Base.Theme.App" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
    <item name="android:windowBackground">@color/activity_background</item>
    <item name="android:textColor">@color/primary_text</item>
    <item name="android:textColorSecondary">@color/secondary_text</item>

    <item name="colorControlHighlight">@color/control_highlight</item>
    <item name="colorControlActivated">?attr/colorAccent</item>
    <!-- You can also set colorControlNormal and colorSwitchThumbNormal. -->

    <!--<item name="android:colorButtonNormal">@color/primary</item>-->

    <item name="android:spinnerStyle">@style/form_spinner</item>
    <item name="spinnerStyle">@style/form_spinner</item>
    <item name="android:spinnerItemStyle">@style/form_spinner_item</item>
    <item name="editTextStyle">@style/form_edittext</item>
    <item name="android:editTextStyle">@style/form_edittext</item>

    <item name="alertDialogTheme">@style/Theme.App.Dialog.Alert</item>
</style>

这是我的alertDialogTheme

<style name="Theme.App.Dialog.Alert" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorAccent">@color/primary</item>
    <item name="android:windowBackground">@color/activity_background</item>
    <item name="android:textColor">@color/primary_text</item>
    <item name="android:textColorSecondary">@color/secondary_text</item>
    <item name="colorControlHighlight">@color/control_highlight</item>
</style>

最佳答案

使用以下主题:

 <style name="custom_alert_dialog">
        <item name="android:windowFrame">@null</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>

在你的代码中:

AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.custom_alert_dialog);

关于android - 如何更改 Android 对话框边距(到屏幕边缘的距离)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32507254/

相关文章:

android - 向后滑动在 Google Glass Activity 中不起作用

Android 每 x 分钟运行一次 Kotlin Coroutine

android rxjava2/retrofit2 使用分页 token 链接调用

android - 我的应用程序的键盘永久可见

Android - onContextItemSelected 中的 AlertDialog 不起作用

Java Swing - 如何在另一个面板上显示一个面板?

java - 为什么此 GWT 对话框不将其两个按钮居中?

linux - 删除 QDialogs 默认关闭按钮

android - 警报对话框生成器停止响应

android - 如何在 onGeolocationPermissionsShowPrompt 中显示弹出窗口