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