我想改变AlertDialog(Holo Theme)中出现的蓝色Title和蓝线的颜色,我可以通过查看android styles.xml和themes.xml来改变Title的颜色,但我找不到任何颜色我可以使用/更改的属性或样式来更改XML的颜色。
以下是我用来更改标题颜色的样式
<style name="myAlertDialog" parent="android:Theme.Holo.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowTitleStyle">@style/myAlertDialogTitleStyle</item>
</style>
<style name="myAlertDialogTitleStyle">
<item name="android:maxLines">1</item>
<item name="android:scrollHorizontally">true</item>
<item name="android:textAppearance">@style/myAlertDialogTitleStyleTextAppearance</item>
</style>
<style name="myAlertDialogTitleStyleTextAppearance">
<item name="android:textSize">22sp</item>
<item name="android:textColor">#ffff8800</item>
</style>
答案 0 :(得分:4)
编辑:我在原来的回答中弄错了。
不幸的是用于对话框的样式是内部的,不能使用,其方式与其他一些易于操作的holo元素相同。 I have created an open source project for dealing with this in very simple situations(我希望将其延伸到更远的地方......合法)。以下是一个新答案的链接,可以更深入地解决这个问题:How can I change the color of AlertDialog title and the color of the line under it
对后人来说,这是我天真的老回答:
查看answer posted here。为了您的特定目标,您需要覆盖dialogTitleDecorLayout
样式(我认为!),而不是listSeparatorTextViewStyle
样式。
如果您对最初设置的位置感到好奇,可以在计算机上的android sdk文件夹中找到themes.xml文件并搜索dialogTitleDecorLayout
属性。这应该会引导您进入dialog_title_holo
布局文件,该文件也应该在您的计算机上。你应该在布局中找到以下代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:fitsSystemWindows="true">
<TextView android:id="@android:id/title" style="?android:attr/windowTitleStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="60dip"
android:paddingLeft="32dip"
android:paddingRight="32dip"
android:gravity="center_vertical|left" />
<ImageView android:id="@+id/titleDivider"
android:layout_width="match_parent"
android:layout_height="4dip"
android:scaleType="fitXY"
android:gravity="fill_horizontal"
android:paddingLeft="16dip"
android:paddingRight="16dip"
android:src="@android:drawable/divider_strong_holo" />
<FrameLayout
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:foreground="?android:attr/windowContentOverlay">
<FrameLayout android:id="@android:id/content"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
</LinearLayout>
注意代码是@android:drawable/divider_strong_holo
引用。此文件也存在于您的计算机上,它应该是蓝色9patch。您需要创建一个不同颜色的类似9patch。祝好运!即使这不是一个正确的属性,我想你会看到你可能需要做的事情......
答案 1 :(得分:4)
经过一些修修补补,我想出了一种方法,可以在对话框显示时重新标记对话:
private AlertDialog showWithThemeColors() {
Log.d(TAG, "showWithThemeColors()");
AlertDialog dialog = this.builder.show();
try {
ViewGroup decorView = (ViewGroup) dialog.getWindow().getDecorView();
FrameLayout windowContentView = (FrameLayout) decorView.getChildAt(0);
FrameLayout contentView = (FrameLayout) windowContentView.getChildAt(0);
LinearLayout parentPanel = (LinearLayout) contentView.getChildAt(0);
LinearLayout topPanel = (LinearLayout) parentPanel.getChildAt(0);
View titleDivider = topPanel.getChildAt(2);
LinearLayout titleTemplate = (LinearLayout) topPanel.getChildAt(1);
TextView alertTitle = (TextView) titleTemplate.getChildAt(1);
int textColor = this.context.getResources().getColor(R.color.customer_text_on_primary);
alertTitle.setTextColor(textColor);
int primaryColor = this.context.getResources().getColor(R.color.customer_primary);
titleDivider.setBackgroundColor(primaryColor);
} catch (Exception e) {
Log.e(TAG, "showWithThemeColors() - Could not re-brand dialog with theme colors.", e);
}
return dialog;
}
请注意,只要对话框的基础系统布局发生变化,此解决方案就会中断。但是,这是原始系统对话框,具有此类解决方案的所有优点。
答案 2 :(得分:1)
有一个库可以完全覆盖所有对话框: