如何更改AlertDialog标题的颜色以及其下方的线条颜色

Moh*_*ush 107 android android-alertdialog

我使用此命令更改了AlertDialog标题的颜色

alert.setTitle( Html.fromHtml("<font color='#FF7F27'>Set IP Address</font>"));
Run Code Online (Sandbox Code Playgroud)

但我想改变标题下出现的线条的颜色; 我怎样才能做到这一点 ?

注意:我不想使用自定义布局

所需效果的屏幕截图

Dan*_*ith 133

不幸的是,这不是一项特别简单的任务.在我的答案中,我详细介绍了如何ListSeparator通过检查Android使用的父样式,创建新图像以及根据原始图像创建新样式来调整a的颜色.不幸的是,与ListSeparator样式不同,AlertDialog主题是内部的,因此不能作为父样式引用.没有简单的方法来改变那条小蓝线!因此,您需要使用自定义对话框.

如果这不是你的一杯茶...... 不要放弃!我非常不安,没有简单的方法可以做到这一点,所以我在github上设置了一个小项目来制作快速定制的全息式对话框(假设手机支持Holo风格).你可以在这里找到这个项目:https://github.com/danoz73/QustomDialog

它应该很容易从无聊的蓝色到激动人心的橙色!

在此输入图像描述

该项目基本上是使用自定义对话框构建器的示例,在示例中,我创建了一个自定义视图,似乎可以满足您在原始问题中提供的IP地址示例.

使用QustomDialog,为了创建一个基本对话框(标题,消息),标题或分隔符具有所需的不同颜色,您可以使用以下代码:

private String HALLOWEEN_ORANGE = "#FF7F27";

QustomDialogBuilder qustomDialogBuilder = new QustomDialogBuilder(v.getContext()).
    setTitle("Set IP Address").
    setTitleColor(HALLOWEEN_ORANGE).
    setDividerColor(HALLOWEEN_ORANGE).
    setMessage("You are now entering the 10th dimension.");

qustomDialogBuilder.show();
Run Code Online (Sandbox Code Playgroud)

并且为了添加自定义布局(例如,添加小IP地址EditText),您可以添加

setCustomView(R.layout.example_ip_address_layout, v.getContext())
Run Code Online (Sandbox Code Playgroud)

使用您设计的布局构建器(可以在github中找到IP示例).我希望这有帮助.非常感谢Joseph Earl和他的回答.

  • Android可能正在尝试实施一致的UI模式,因此这可能是为什么这是如此具有挑战性.这是我可以创建的最佳解决方案来帮助您.我希望你觉得它很有用,或者至少有趣且内容丰富:) (3认同)
  • 好吧,也许还没有......我正面临着名单下方标题的问题......对不起. (3认同)
  • 为什么android仍然不支持更改警告对话框的颜色,我应该使用另一个对话框,或者问题出在哪里? (2认同)
  • 你好,丹尼尔。感谢您分享您的工作。这很有帮助。我在执行此操作时面临一个问题。实际上,我想在此自定义对话框中使用`setItems`添加单个项目选择。当我添加列表时,它实际上将标题移到了列表下方。如何解决这个问题。 (2认同)

mmr*_*tin 74

分频器颜色:

这是一个hack有点,但它对我来说很好,它没有任何外部库(至少在Android 4.4上).

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.dialog)
       .setIcon(R.drawable.ic)
       .setMessage(R.string.dialog_msg);
//The tricky part
Dialog d = builder.show();
int dividerId = d.getContext().getResources().getIdentifier("android:id/titleDivider", null, null);
View divider = d.findViewById(dividerId);
divider.setBackgroundColor(getResources().getColor(R.color.my_color));
Run Code Online (Sandbox Code Playgroud)

您可以在alert_dialog.xml文件中找到更多对话框ID .例如.android:id/alertTitle改变标题颜色......

更新:标题颜色

用于更改标题颜色的Hack:

int textViewId = d.getContext().getResources().getIdentifier("android:id/alertTitle", null, null);
TextView tv = (TextView) d.findViewById(textViewId);
tv.setTextColor(getResources().getColor(R.color.my_color));
Run Code Online (Sandbox Code Playgroud)

  • 我在`setTextColor()`得到`NullPointerException` (3认同)
  • @platzhirsch,在我的自定义DialogFragment类中,我通过在onStart()中运行自定义代码来避免requestFeature()问题.您可以使用getDialog()访问那里的对话框. (2认同)

Mr.*_*ndy 21

检查这对你有用 ...

public void setCustomTitle (View customTitleView)
Run Code Online (Sandbox Code Playgroud)

你从以下链接获得详细信息.

http://developer.android.com/reference/android/app/AlertDialog.Builder.html#setCustomTitle%28android.view.View%29

CustomDialog.java

Dialog alert = new Dialog(this);
    alert.requestWindowFeature(Window.FEATURE_NO_TITLE);
    alert.setContentView(R.layout.title);
    TextView msg = (TextView)alert.findViewById(R.id.textView1);
    msg.setText("Hello Friends.\nIP address : 111.111.1.111");
    alert.show();
Run Code Online (Sandbox Code Playgroud)

title.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Set IP address"
    android:textColor="#ff0000"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<ImageView 
    android:layout_width="fill_parent"
    android:layout_height="2dp"
    android:layout_marginTop="5dp"
    android:background="#00ff00"
    />
<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="#775500"
    android:textAppearance="?android:attr/textAppearanceLarge" />
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Jar*_*ler 10

这将设置标题,图标和分隔符的颜色.必须随着任何新的Android版本而改变.

public static void colorAlertDialogTitle(AlertDialog dialog, int color) {
    int dividerId = dialog.getContext().getResources().getIdentifier("android:id/titleDivider", null, null);
    if (dividerId != 0) {
        View divider = dialog.findViewById(dividerId);
        divider.setBackgroundColor(color);
    }

    int textViewId = dialog.getContext().getResources().getIdentifier("android:id/alertTitle", null, null);
    if (textViewId != 0) {
        TextView tv = (TextView) dialog.findViewById(textViewId);
        tv.setTextColor(color);
    }

    int iconId = dialog.getContext().getResources().getIdentifier("android:id/icon", null, null);
    if (iconId != 0) {
        ImageView icon = (ImageView) dialog.findViewById(iconId);
        icon.setColorFilter(color);
    }
}
Run Code Online (Sandbox Code Playgroud)

记得在调用此方法之前调用dialog.show().


mrd*_*abd 7

通过遵循Dialog源代码,我发现MidWindow通过膨胀dialog_title_holo.xml布局在Class中生成Title .所以我的Id mTitleViewtitle和分隔符的Id titleDivider.

我们可以title简单地访问Id android.R.id.title.

并获得的标识titleDividerResources.getSystem().getIdentifier("titleDivider","id", "android");

我用来改变标题方向和改变颜色的最终代码是:

TextView mTitle = (TextView)findViewById(android.R.id.title);
mTitle.setGravity(Gravity.RIGHT|Gravity.CENTER_VERTICAL);
int x = Resources.getSystem().getIdentifier("titleDivider","id", "android");
View titleDivider = findViewById(x);
titleDivider.setBackgroundColor(getContext().getResources().getColor(R.color.some_color));
Run Code Online (Sandbox Code Playgroud)