如何使用appCompat 22.1及更高版本

时间:2015-04-22 12:09:31

标签: android android-support-library alertdialog android-appcompat

我正在尝试从默认的android AlertDialog迁移到appCompat-22.1中包含的新版本 到目前为止,我了解您只需导入android.support.v7.app.AlertDialog包即可使用它。

但我该如何设计呢?例如,更改正/负按钮颜色,标题颜色,消息颜色和背景颜色?

6 个答案:

答案 0 :(得分:428)

创建AlertDialog时,您可以设置要使用的主题。

示例 - 创建对话框

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle);
builder.setTitle("AppCompatDialog");
builder.setMessage("Lorem ipsum dolor...");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();

styles.xml - 自定义样式

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">#FFC107</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="android:background">#4CAF50</item>
</style>

<强>结果

styled alertdialog

修改

要更改标题的外观,您可以执行以下操作。首先添加一种新风格:

<style name="MyTitleTextStyle">
    <item name="android:textColor">#FFEB3B</item>
    <item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
</style>

之后只需在MyAlertDialogStyle

中引用此款式
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    ...
    <item name="android:windowTitleStyle">@style/MyTitleTextStyle</item>
</style>

这样,您可以通过textColor为消息定义不同的android:textColorPrimary,并通过样式为标题定义不同的IIf([color] = "RApple", "Red Apple", IIf([color] = "GApple", "Green Apple", "No Match"))

答案 1 :(得分:56)

要为所有应用程序使用主题,请不要使用第二个参数来设置对话框的样式

<style name="MyTheme" parent="Base.Theme.AppCompat.Light">
    <item name="alertDialogTheme">@style/dialog</item>
    <item name="colorAccent">@color/accent</item>
</style>

<style name="dialog" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/accent</item>
</style>

在我的应用程序中使用主题中的颜色重音不显示带有主题colorAccent的alertDialog按钮我必须在主题中添加对话框样式。

答案 2 :(得分:18)

如果您想使用新的android.support.v7.app.AlertDialog并为按钮添加不同的颜色,并且还有自定义布局,那么请查看我的https://gist.github.com/JoachimR/6bfbc175d5c8116d411e

VM10628

enter image description here

答案 3 :(得分:6)

关注@reVerse回答,但在我的情况下,我已经在AppTheme中找到了一些属性

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
    <item name="android:textColor">#111</item>
    <item name="android:textSize">13sp</item>
</style>

所以我的对话框看起来像是 enter image description here

我通过

解决了这个问题

1)将导入从android.app.AlertDialog更改为 android.support.v7.app.AlertDialog
2)我在AppTheme中覆盖2属性,值为空值

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">#FFC107</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="android:background">#4CAF50</item>


    <item name="android:textColor">@null</item>
    <item name="android:textSize">@null</item>
</style>

AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.MyAlertDialogStyle);

希望它可以帮助其他人

enter image description here

答案 4 :(得分:2)

如果您像我一样,只想修改AppCompat中的某些颜色,并且对话框中唯一需要唯一更改的颜色就是背景。然后,您需要做的就是为colorBackgroundFloating设置颜色。

这是我的基本主题,它仅修改了一些没有嵌套主题的颜色:

    <style name="AppTheme" parent="Theme.AppCompat">
        <item name="colorPrimary">@color/theme_colorPrimary</item>
        <item name="colorPrimaryDark">@color/theme_colorPrimaryDark</item>
        <item name="colorAccent">@color/theme_colorAccent</item>
        <item name="colorControlActivated">@color/theme_colorControlActivated</item>
        <item name="android:windowBackground">@color/theme_bg</item>
        <item name="colorBackgroundFloating">@color/theme_dialog_bg</item><!-- Dialog background color -->
        <item name="colorButtonNormal">@color/theme_colorPrimary</item>
        <item name="colorControlHighlight">@color/theme_colorAccent</item>
    </style>

答案 5 :(得分:-2)

    <item name="editTextColor">@color/white</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:textColorHint">@color/gray</item>
    <item name="android:textColorPrimary">@color/gray</item>
    <item name="colorControlNormal">@color/gray</item>
    <item name="colorControlActivated">@color/white</item>
    <item name="colorControlHighlight">#30FFFFFF</item>