设置alertdialog的颜色

时间:2015-10-26 03:22:24

标签: android xml themes

我在我的应用程序中显示alertdialog,但标题的左侧和右侧显示不同的颜色。我在thems.xml中设置了自己的背景颜色

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">    
<style name="ACCAppTheme" parent="android:Theme.Holo">
    <!-- Change default text colour from dark grey to black -->
    <!-- <item name="android:windowBackground">@drawable/ic_logo</item> -->
    <item name="android:background">#140051</item>
    <item name="android:textColor">#ffffff</item>
    <item name="android:textColorHint">#c0c0c0</item>        
    <item name="android:actionBarStyle">@style/AppTheme.ActionBar</item>        
</style>    

<!-- <style name="OverFlow" parent="@android:style/Widget.Holo.ActionButton.Overflow">
    <item name="android:textSize">18sp</item>
</style> -->

<style name="AppTheme.ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:background">#140051</item>
    <item name="android:height">50dp</item>
    <item name="android:titleTextStyle">@style/AppTheme.ActionBar.Text</item>
    <item name="android:textColor">@android:color/white</item>
    <item name="android:showDividers">beginning</item>
</style>

<style name="AppTheme.ActionBar.Text" parent="@android:style/TextAppearance">
    <item name="android:textAllCaps">false</item>
    <item name="android:textColor">@android:color/white</item>
</style> 
</resources>

但看起来是这样的

enter image description here

这是创建警告对话框的代码

public class AppMessages {
public static final int MESSAGE_INFO = 1;
public static final int MESSAGE_CRITICAL = 2;

public interface AlertButtonClickListener {

    public abstract void onButtonClicked(boolean value);

}




public static void showMessage(Context context, 
                                String message, 
                                String title,
                                int messageType, 
                                final AlertButtonClickListener target) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setMessage(message)
            .setTitle(title)
            .setIcon(R.drawable.ic_dialog_information)
            .setCancelable(false)
            .setPositiveButton("Ok", new AlertDialog.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (target != null) {
                        target.onButtonClicked(true);
                    }                       
                }
            });

    switch (messageType) {
    case AppMessages.MESSAGE_CRITICAL:
        builder.setIcon(R.drawable.ic_dialog_exclamation);
        break;
    case AppMessages.MESSAGE_INFO:
        builder.setIcon(R.drawable.ic_dialog_information);
        break;
    }

    builder.show();
}






public static void yesNo(final Context mContext,
                        final String title, 
                        final String msg,
                        final String positiveBtnCaption, 
                        final String negativeBtnCaption,
                        final boolean isCancelable, 
                        final AlertButtonClickListener target) {

        ((Activity) mContext).runOnUiThread(new Runnable() {

        @Override
        public void run() {
            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);

            builder.setTitle(title)
                    .setMessage(msg)                        
                    .setIcon(R.drawable.ic_dialog_question)
                    .setCancelable(false)
                    .setPositiveButton(positiveBtnCaption,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    target.onButtonClicked(true);
                                }
                            })
                    .setNegativeButton(negativeBtnCaption,
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    target.onButtonClicked(false);
                                }
                            });

            AlertDialog alert = builder.create();
            alert.setCancelable(isCancelable);
            alert.show();
            if (isCancelable) {
                alert.setOnCancelListener(new OnCancelListener() {
                    @Override
                    public void onCancel(DialogInterface arg0) {
                        target.onButtonClicked(false);
                    }
                });
            }
        }
    });

}
}

这就是我如何称呼它

AppMessages.showMessage(thisActivity, 
                                    "New update found. Click Ok to download it now.", 
                                    "New Update Found", 
                                    1,
                                    new AppMessages.AlertButtonClickListener() {
                                        @Override
                                        public void onButtonClicked(boolean value) {
                                            APKDownloader.downloadAPK(thisActivity);
                                        }
                                    });

1 个答案:

答案 0 :(得分:0)

试试这个,

自定义AlertDialog主题

在res / values /

下创建一个新的Android XML资源文件

您想要创建一个继承自默认alertdialog主题的新样式:

<style name="CustomDialogTheme" parent="@android:style/Theme.Dialog">
    <item name="android:bottomBright">@color/white</item>
    <item name="android:bottomDark">@color/white</item>
    <item name="android:bottomMedium">@color/white</item>
    <item name="android:centerBright">@color/white</item>
    <item name="android:centerDark">@color/white</item>
    <item name="android:centerMedium">@color/white</item>
    <item name="android:fullBright">@color/orange</item>
    <item name="android:fullDark">@color/orange</item>
    <item name="android:topBright">@color/blue</item>
    <item name="android:topDark">@color/blue</item>
</style>

您可以为AlertDialog的每个部分指定颜色或drawable。 AlertDialog将通过组合3个drawables / colors(顶部,中间,底部)或单个drawable / color(full)来构建它的显示。

在你自己的主题中覆盖android:alertDialogStyle样式(你可以在同一个XML文件中执行此操作):

    @风格/ CustomDialogTheme

在应用标记内的AndroidManifest中覆盖您的应用程序主题:

<application 
        android:icon="@drawable/icon" 
        android:label="@string/app_name"
        android:theme="@style/MyTheme">

现在您已经定义了应用程序的主题,您主题中覆盖的所有属性都会在整个应用程序中产生共鸣。 例如,如果您还想更改应用程序标题栏的颜色: 您首先要定义一个继承自默认属性

的新样式


    @色/蓝  

只需将新覆盖的项目添加到您的主题:

<style name="MyTheme">
    <item name="android:windowTitleBackgroundStyle">@style/MyBackground</item>
    <item name="android:alertDialogStyle">@style/CustomDialogTheme</item>
</style>