Android - 改变应用中所有对话框标题的样式

16

我能否改变在我的安卓应用中出现的所有警示对话框?我希望修改系统生成的对话框,包括(像长按任何 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时的默认对话框。通常它包含键盘选项,如选择单词、选择全部、输入法等。

2个回答

22
在您的对话主题中,需要修改的属性是 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的样式,我写了一篇博客文章详细介绍了步骤。


6
在 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是非常重要的,因为它可以使你的标题达到你所需要的效果。

现在,只需在任何你想要的 activity 的 AlertDialog 中使用这个主题,如下所示:

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

1
如果必须将样式传递给“Builder”,为什么还要在应用程序主题中设置它? - User

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接