【问题标题】:How to automatically apply material primary and accent colors to dialog如何自动将材质原色和强调色应用于对话框
【发布时间】:2015-10-02 08:28:33
【问题描述】:

我有自定义主题,更改了原色和强调色。但是AlertDialog 在我创建对话框时不会自动拾取这些颜色:

AlertDialog.Builder builder = new AlertDialog.Builder(this);

这就是我得到的 - 带有默认颜色的对话框:

这就是我想要的——带有自定义颜色的对话框:

我可以创建自定义AlertDialog 主题并在AlertDialog 创建期间应用它:

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

我想跳过使用主题参数调用构造函数。

有没有办法在所有主题上强制使用自定义颜色而不用样式派生它们,包括AlertDialog 基本主题?

我必须支持的最小 API 级别是 15。


我的活动代码

import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dialog();
    }

    public void dialog()
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Dialog");
        builder.setMessage("Lorem ipsum dolor ...");
        builder.setPositiveButton("OK", null);
        builder.setNegativeButton("Cancel", null);
        builder.show();
    }
}

我的定制风格

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="AppTheme.Dialog" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

我的颜色

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
</resources>

【问题讨论】:

  • 作为一种折衷方案,您可以在应用的主题中设置android:alertDialogTheme。您仍然必须使用自己的原色使其指向样式/主题,但至少您可以跳过将其显式提供给构造函数。既然你已经有了,它看起来像&lt;item name="android:alertDialogTheme"&gt;@style/AppTheme.Dialog&lt;/item&gt;
  • @MH。有趣的android:alertDialogTheme 不起作用,但alertDialogTheme 起作用。
  • 啊,是的,我真傻。 v7 AlertDialog 可能会解析它自己的R.attr.alertDialogTheme 而不是android.R.attr.alertDialogTheme,因为否则它将与 API 级别 7-11 不兼容(该属性直到 API 级别 11 才引入)。无论如何,根据接受的答案,您似乎可以再去一次。 :)
  • @MH。是的,我可以走了。谢谢!

标签: java android material-design


【解决方案1】:

将此添加到您的应用主题中:

<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- your style -->
<item name="alertDialogTheme">@style/AppTheme.Dialog</item>

然后,

import android.support.v7.app.AlertDialog
AlertDialog.Builder builder = new AlertDialog.Builder(this);

【讨论】:

    猜你喜欢
    • 2020-07-24
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    相关资源
    最近更新 更多