自定义AlertDailog.Builder Android

时间:2014-08-30 14:28:31

标签: android android-alertdialog

我正在尝试自定义AlertDailog。我对AlertDailog的默认布局没问题,所以我不想为我的dailog设置任何特定的视图,我只是想改变文字颜色,背景颜色等小东西。

我尝试了两种方法,这似乎是正确的,但令人惊讶的是它们都不起作用。

首先,我尝试使用自定义样式创建AlertDailog:

    AlertDialog.Builder builder = new AlertDialog.Builder(this,R.style.cust_dialog);

给我输出像

enter image description here

我不明白为什么盒子里面有一个dailog,甚至文字颜色也没有改变,所以我尝试了另一种方式。

我创建了一个ContextThemeWrapper并将其传递给AlertDailog.Builder

    ContextThemeWrapper ctw = new ContextThemeWrapper(this,R.style.cust_dialog);
        AlertDialog.Builder builder = new AlertDialog.Builder(ctw);

输出

enter image description here

仍未改变文字颜色或背景。

我的cust_dialog.xml是

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="cust_dialog" parent="@android:style/Theme.Holo.Light.Dialog">
        <item name="android:windowBackground">@color/brown</item>
        <item name="android:textColor">@color/red</item>
    </style>
</resources>

有人可以告诉我,我做错了什么或者做错的方法是什么?

谢谢:)

2 个答案:

答案 0 :(得分:0)

好吧,它比您尝试的解决方案更复杂,但为什么不构建完整的自定义对话框?

我已经做过这个,它就像一个魅力。 你只需要:

  1. 为您的对话框视图创建布局xml,如经典视图
  2. 使用extends Dialog
  3. 创建一个类
  4. 最后像其他
  5. 一样使用自定义对话框

    如果您需要示例代码,请与我们联系。

答案 1 :(得分:0)

不幸的是,提交对话框比仅更改属性windowBackgroundtextColor稍微复杂一些。你应该像这样定义你的主题:

<style name="YourAlertDialogTheme">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</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:windowTitleStyle">...</item>
    <item name="android:textAppearanceMedium">...</item>
    <item name="android:borderlessButtonStyle">...</item>
    <item name="android:buttonBarStyle">...</item>
</style>

我写了一篇完整的博客文章,详细介绍了如何定义和链接每个元素的样式here。你将能够做到这样的事情:

Please have better taste than that

(请有比这更好的味道)