如何使用appCompat 22.1及更高版本的新AlertDialog并设置其样式

Tha*_*man 149 android android-appcompat android-alertdialog android-support-library

我正在尝试从默认的android迁移AlertDialog到appCompat-22.1中包含的新的android 到目前为止我了解你只需导入android.support.v7.app.AlertDialog包以便使用它.

但我怎么样呢呢?例如,更改正/负按钮颜色,标题颜色,消息颜色和背景颜色?

reV*_*rse 436

创建时,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();
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

结果

称为alertdialog

编辑

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

<style name="MyTitleTextStyle">
    <item name="android:textColor">#FFEB3B</item>
    <item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
</style>
Run Code Online (Sandbox Code Playgroud)

之后只需在您的参考中引用此样式MyAlertDialogStyle:

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    ...
    <item name="android:windowTitleStyle">@style/MyTitleTextStyle</item>
</style>
Run Code Online (Sandbox Code Playgroud)

这样,您可以通过样式textColor为消息定义android:textColorPrimary不同的标题,并为标题定义不同的标题.

  • 又见面了!有没有办法改变消息的文本大小? (3认同)
  • 谢谢@reVerse 还有一件事。许多库允许有不同的标题和文本颜色。你知道这在这里也可能吗? (2认同)
  • @summers Jup.这基本上是"appcompat-v7"的概念 - 它将新组件向后兼容到API级别7(Android 2.1) (2认同)

neo*_*nic 59

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

  • 也许在API 15+上.我只在API 15+上启动新项目,我认为Android之前的Android在2015年已经过时了. (2认同)

IHe*_*oid 19

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

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.custom_layout, null);

    initDialogUi(v);

    final AlertDialog d = new AlertDialog.Builder(activity, R.style.AppCompatAlertDialogStyle)
            .setTitle(getString(R.string.some_dialog_title))
            .setCancelable(true)
            .setPositiveButton(activity.getString(R.string.some_dialog_title_btn_positive),
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            doSomething();
                            dismiss();
                        }
                    })
            .setNegativeButton(activity.getString(R.string.some_dialog_title_btn_negative),
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dismiss();
                        }
                    })
            .setView(v)
            .create();

    // change color of positive button         
    d.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
            b.setTextColor(getResources().getColor(R.color.colorPrimary));
        }
    });

    return d;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Pha*_*inh 7

按照@reVerse的答案,但就我而言,我已经拥有一些AppTheme喜欢的属性

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
    <item name="android:textColor">#111</item>
    <item name="android:textSize">13sp</item>
</style>
Run Code Online (Sandbox Code Playgroud)

所以我的对话框看起来像
在此处输入图片说明

我解决了

1)将导入从更改android.app.AlertDialogandroid.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>
Run Code Online (Sandbox Code Playgroud)

AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.MyAlertDialogStyle);
Run Code Online (Sandbox Code Playgroud)

希望对别人有帮助

在此处输入图片说明