Ответ 1
Я пошел копаться вокруг источника и наткнулся на файл макета alert_dialog_holo.xml
. Это вид разделителя:
<View android:id="@+id/titleDivider"
android:layout_width="match_parent"
android:layout_height="2dip"
android:visibility="gone"
android:background="@android:color/holo_blue_light" />
В классе AlertController
его видимость устанавливается на VISIBLE
, если присутствует название. Поскольку цвет жестко закодирован, не будет способа перезаписать это с помощью атрибута style.
Это название:
<com.android.internal.widget.DialogTitle android:id="@+id/alertTitle"
style="?android:attr/windowTitleStyle"
android:singleLine="true"
android:ellipsize="end"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Поэтому он использует windowTitleStyle
. Это заняло много гонок, но в итоге я нашел стиль, который использует:
<style name="TextAppearance.Holo.DialogWindowTitle">
<item name="android:textSize">22sp</item>
<item name="android:textColor">@android:color/holo_blue_light</item>
</style>
Следуя родительским стилям назад, я смог изменить цвет текста только через стили:
<style name="AppTheme" parent="@android:style/Theme.Holo">
<item name="android:alertDialogTheme">@style/AlertDialogStyle</item>
</style>
<style name="AlertDialogStyle" parent="@android:style/Theme.Holo.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
<item name="android:windowTitleStyle">@style/DialogWindowTitle</item>
</style>
<style name="DialogWindowTitle">
<item name="android:maxLines">1</item>
<item name="android:scrollHorizontally">true</item>
<item name="android:textAppearance">@style/DialogWindowTitleAppearance</item>
</style>
<style name="DialogWindowTitleAppearance" parent="@android:style/TextAppearance.Holo.DialogWindowTitle">
<item name="android:textColor">#00ff00</item>
</style>
Теперь для разделителя вы не можете изменить его с помощью стилей, но, поскольку вы знаете идентификатор, вы можете расширить класс AlertDialog
и перехватить его, когда он создаст свой макет (onCreate) и изменит его цвет. Хотя это обрабатывается в частном классе AlertController
, поэтому я не уверен, насколько вам повезет. Я посмотрю на это больше и вернусь, если придумаю что-нибудь.