1

我一直在寻找一种简单而干净的方式来改变我的AlertDialog侧边,但没有成功。为了更加清晰,我想要的是改变对话框的每个边和屏幕的边/边之间的距离。我想我的对话框,显示一个类似于那些出现在 Material Design specification如何更改Android对话框边距(到屏幕边缘的距离)?

这里是我想什么图像/从一个简单的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每次做。我尝试将边距设置为应用于对话框的样式,但是它没有做任何操作,或者改变了对话框的内边距(内容和对话框的边/边之间的边距)。我想我正在看错误的风格。

有没有人提出过这个问题?有关如何在样式中而不是在代码中设置此边距的任何想法?

UPDATE:

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

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

什么是您的基本应用程序风格/主题? –

+0

也许尝试查看具有托管其中的警报对话框的主布局的XML文件,然后更改该文件中根元素的左侧和右侧填充。 –

+0

@dieter_h我已经添加了我的基本应用程序样式/主题。 – acrespo

回答

1

我的建议是(也许这是因为我爱建立自定义视图一般来说)是建立你自己的对话框并使用FEATURE_NO_TITLE WindowFeature。从那里开始,设置您自己的xml布局文件,您可以根据需要进行自定义,并保留“材料设计指南”。这样你就可以自己定制任何你想要的方式。

事情是这样的:

public class MaterialDialog extends Dialog { 

    protected MaterialDialog(Context context) { 
     super(context); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.dialog_material); 
     // From here on, you initialize your title, message and negative and(or) positive buttons. 
    } 
} 
1

使用以下主题:

<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建设者=新AlertDialog.Builder(背景下, R.style.custom_alert_dialog);