Android AlertDialog 样式问题

Android AlertDialog Styling Issues

几天来,我一直在努力尝试设置 alertDialog 的样式。我一直在搜索并尝试了很多不同的方法,但仍然无法正常工作。

1) 我无法在关闭按钮上更改字体大小

2) 我无法让文本在按钮或主消息文本上水平和垂直居中

3) 有没有办法去掉方框阴影?

4) 最不重要 - 我知道我可以将主题设置为 holo.light 但我一直在尝试将消息框的背景颜色更改为白色。虽然我可以通过更改主题来做到这一点,但我想更多地了解所有这些

如果有人对这些问题有任何想法,我将不胜感激。谢谢(下面的代码)

styles.xml

<style name="G4STheme" parent="@android:style/Theme.Holo">
    <item name="android:alertDialogTheme">@style/G4S.AlertDialog</item>
    <item name="android:dialogTheme">@style/G4S.AlertDialog</item>
</style>

<style name="Theme_Holo_Dialog_Alert" parent="@android:style/Theme.Holo.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@style/DialogWindowTitle_Holo</item>
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
</style>

<style name="DialogWindowTitle_Holo">
    <item name="android:maxLines">1</item>
    <item name="android:scrollHorizontally">true</item>
    <item name="android:textAppearance">@android:style/TextAppearance.Holo.DialogWindowTitle</item>
</style>

<style name="G4S.AlertDialog" parent="@android:style/Theme.Holo.Dialog">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
    <item name="android:textAppearanceMedium">@style/TextAppearance.G4S.Medium</item>
    <item name="android:borderlessButtonStyle">@style/Widget.G4S.Button.Borderless</item>
    <item name="android:buttonBarStyle">@style/G4S.ButtonBar.AlertDialog</item>
    <item name="android:buttonStyle">@style/Widget.G4S.Button.Borderless</item>
</style>

<style name="AlertDialog_G4S">
    <item name="android:fullDark">#ffffff</item>
    <item name="android:topDark">#ffffff</item>
    <item name="android:centerDark">#ffffff</item>
    <item name="android:bottomDark">#ffffff</item>
    <item name="android:fullBright">#ffffff</item>
    <item name="android:topBright">#ffffff</item>
    <item name="android:centerBright">#ffffff</item>
    <item name="android:bottomBright">#ffffff</item>
    <item name="android:bottomMedium">#ffffff</item>
    <item name="android:centerMedium">#ffffff</item>
</style>

<style name="TextAppearance.G4S.DialogWindowTitle" parent="@android:style/TextAppearance.Holo.DialogWindowTitle">
    <item name="android:textColor">@android:color/holo_green_light</item>
    <item name="android:textStyle">bold</item>
</style>

<style name="TextAppearance.G4S.Medium" parent="@android:style/TextAppearance.Holo.Medium">
    <item name="android:textSize">16sp</item>
    <item name="android:minHeight">156dp</item>
    <item name="android:layout_centerHorizontal">true</item>
</style>

<style name="Widget.G4S.Button.Borderless" parent="@android:style/Widget.Holo.Button.Borderless">
    <item name="android:textAppearance">@style/TextAppearance.G4S.DialogButton</item>
    <item name="android:textSize">40sp</item>
</style>

<style name="TextAppearance.G4S.DialogButton" parent="@android:style/TextAppearance.Holo.Medium">
    <item name="android:textAllCaps">true</item>
    <item name="android:textColor">#fff</item>
    <item name="android:textSize">40sp</item>
</style>

<style name="G4S.ButtonBar.AlertDialog" parent="@android:style/Holo.ButtonBar.AlertDialog">
    <item name="android:background">#4aa3cb</item>
    <item name="android:minHeight">96dp</item>
</style>

G4SAlertDialog.java

public class G4SAlertDialog extends DialogFragment {

AlertDialog.Builder dialogBuilder;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    dialogBuilder = new AlertDialog.Builder(getActivity());

    dialogBuilder.setMessage(R.string.error_login_failed)
            .setNegativeButton(R.string.error_login_dialog_close, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // Dialog closed
                }
            });

    return dialogBuilder.create();
}
}

在 activity 中启动对话框:

G4SAlertDialog failModal = new G4SAlertDialog();
failModal.show(getFragmentManager(), "acknowledgements");

您可以为 AlertDialog 或 Dialog 扩充自定义布局。很简单,看看这个教程:

http://www.mkyong.com/android/android-custom-dialog-example/

创建您的 custom_dialog.xml,然后按照教程 link 中所示编写代码。

希望对您有所帮助。