【问题标题】:Android - change dialog title style of all dialogs in applicationAndroid - 更改应用程序中所有对话框的对话框标题样式
【发布时间】:2012-08-12 09:39:17
【问题描述】:

有没有一种方法可以更改出现在我的 Android 应用程序中的所有警报对话框?我还想更改系统生成的对话框(就像长按任何 EditText 时打开的“编辑文本”对话框)。我想更改应用中所有对话框的标题字体颜色和大小。

有办法吗?

我尝试在我的主题中设置android:alertDialogTheme。但它似乎不起作用。代码如下 -

<style name="Theme.DLight" parent="android:Theme.Light.NoTitleBar">
    <item name="android:alertDialogTheme">@style/DialogStyle</item>
</style>

<style name="DialogStyle" parent="android:Theme" >    
    <item name="android:windowBackground">@drawable/background_holo_light</item>
    <item name="android:textColor">#014076</item>       
</style>

编辑

我没有从我的代码中调用对话框。这只是默认对话框 当您长按任何 EditText 时出现。一般它 包含键盘选项,如选择单词、全选、输入 方法等

【问题讨论】:

    标签: android android-alertdialog android-theme


    【解决方案1】:

    在你的对话框主题中,你需要修改windowTitleStyle的属性。在那里,为您的标题引用一个样式并为此标题定义一个文本外观。例如,将标题显示为红色和粗体:

    <style name="AppTheme" parent="@android:style/Theme.Holo">
        ...  
        <item name="alertDialogTheme">@style/AppTheme.AlertDialog</item>
    </style>
    
    <style name="DialogStyle" parent="@style/Theme.Holo.Dialog.Alert">    
        ...
        <item name="android:windowTitleStyle">@style/DialogWindowTitle_Custom</item>
    </style>
    
    <style name="DialogWindowTitle_Custom" parent="@style/DialogWindowTitle_Holo">
        <item name="android:maxLines">1</item>
        <item name="android:scrollHorizontally">true</item>
        <item name="android:textAppearance">@style/TextAppearance_DialogWindowTitle</item>
    </style>
    
    <style name="TextAppearance_DialogWindowTitle" parent="@android:style/TextAppearance.Holo.DialogWindowTitle">
        <item name="android:textColor">@android:color/holo_red_light</item>
        <item name="android:textStyle">bold</item>
    </style>
    

    如果您想为您的 AlertDialog 设置更多样式,我写了一个 blog post 详细说明了这些步骤。

    【讨论】:

    • 链接已关闭 :(
    • @wasanga7 已更新 -- 立即尝试
    【解决方案2】:

    在styles.xml中:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <!-- Customize your theme here. -->
           //All your other styles and add the one mntioned below.
    
            <item name="alertDialogTheme">@style/AlertDialogStyle</item>
        </style>
    

    在 AlertDialog 的样式中添加:

     <style name="AlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
            <item name="colorAccent">@color/colorAccent</item>
            <item name="android:textColorPrimary">@color/primary_text</item>
            <item name="android:editTextColor">@color/primary_text</item>
            <item name="android:background">@color/white</item>
            <item name="android:windowTitleStyle">@style/TextAppearance.AppCompat.Title</item>
        </style>
    

    windowTitleStyle 很重要,因为它会为您的标题提供您需要的效果。

    现在只需在您想要的任何活动中的 AlertDialog 中使用此主题,如下所示:

     AlertDialog.Builder dialog = new AlertDialog.Builder(this, R.style.AlertDialogStyle);
    

    【讨论】:

    • 如果需要将样式传递给Builder,为什么还要在应用主题中?
    【解决方案3】:
    import android.app.ProgressDialog;
    import android.content.Context;
    import android.view.animation.Animation;
    
    public class MyProgressDialog extends ProgressDialog {
    
        public MyProgressDialog(Context context) {
            super(context,R.style.NewDialog);
    
            // TODO Auto-generated constructor stub
        }
    
    }
    

    //资源样式文件 res->values->mydialog.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
       <style name="NewDialog" parent="@android:style/Theme.Dialog">
    
        <item name="android:windowFrame">@null</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowTitleStyle">@null</item>
        <item name="android:colorBackground">#ffffff</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:width">30dip</item>
        <item name="android:height">30dip</item>
         <item name="android:textColor">#FF0000</item>
    
    </style>
    </resources>
    

    //并在您的应用程序中的任何位置使用此代码以获取自定义进度对话框

    MyProgressDialog pd = new MyProgressDialog(YouActivity.this);
    pd.setMessage("Loading. Please wait...");
    pd.show();
    

    谢谢:)

    【讨论】:

    • 嗨,我没有从我的代码中调用对话框。它只是您长按任意EditText 时出现的默认对话框。通常它包含键盘选项,如选择单词、全选、输入法等。
    • 这个答案不满足问题。他没有为有问题的对话框调用任何构造函数。他想通过应用应用程序主题来更改所有对话框的主题,以便在实例化对话框时不必显式应用样式,而是自动应用到整个应用程序中的每个对话框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多