Какие атрибуты темы мне нужно переопределить, чтобы изменить синий цвет подсветки моих диалоговых окон?
у меня есть тема под названием "greenhighlight" - эта тема была создана с помощью Генератор Стиля Панели Действий Android, и наследует от темы ActionBarSherlock по умолчанию. Тема ничего не делает, кроме изменения подсветки в нижней части верхней панели с синего на зеленый.
В тему все мои действия, я просто делаю:
<application android:theme="@style/Theme.greenhighlight"...
это работает довольно хорошо для деятельности (обратите внимание на зеленую подсветку в нижней части Верхней панели):
тем не менее, мне трудно тематизировать мои диалоги, чтобы соответствовать моей деятельности:
моя "тема greenhighlight_Dialog" определяется как:
<style name="greenhighlight_Dialog" parent="@style/Theme.Sherlock.Dialog">
<item name="android:progressBarStyleHorizontal">
@style/greenhighlight_ProgressBar
</item>
</style>
Я наследую от темы диалога Шерлока по умолчанию и переопределяю индикатор выполнения, используя стиль индикатора выполнения, определенный моей сгенерированной темой "greenhighlight" - вы можете видеть, что индикатор выполнения является правильным оттенком зеленого цвета на скриншоте выше.
чтобы использовать тему, я запускаю следующий код:
ContextThemeWrapper ctw =
new ContextThemeWrapper(this, R.style.greenhighlight_Dialog);
AlertDialog.Builder builder = new AlertDialog.Builder(ctw);
...
ProgressDialog pd = new ProgressDialog(this, R.style.greenhighlight_Dialog);
...
моя проблема заключается в том, что я понятия не имею, какие атрибуты мне нужно переопределить. Я просматривал стили.в XML и темы.в XML рекомендовано стили и темы doco (который отмечает ,что "ссылка на R. style, однако, не хорошо документирована и не полностью описывает стили") - но есть много стилей определено по теме.Диалог, и я не уверен, какие из них мне нужно переопределить, чтобы получить изменения, которые я хочу.
какие атрибуты мне нужно переопределить, чтобы мои диалоги имели зеленый текст заголовка, зеленую панель подсветки под заголовком и зеленые флажки для элементов проверенного списка?
2 ответов
я пошел копать вокруг источника и наткнулся на 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
если есть настоящее название. Поскольку цвет жестко закодирован, не будет способа перезаписать это атрибутом стиля.
это заголовок страницы:
<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
class и перехватить его, когда он создает свой макет (onCreate) и изменить его цвет. Хотя это обрабатывается в частном AlertController
класс, поэтому я не уверен, насколько Вам ПОВЕЗЕТ. Я разберусь с этим и вернусь, если что-нибудь придумаю. что угодно.
Я нашел решение для удаления разделителя: просто добавьте следующую строку в свой пользовательский стиль диалога оповещения (см. AlertDialogStyle в ответе Джейсона Робинсона):
<item name="android:divider">@null</item>"
тогда делитель исчезнет.
Если вы все еще хотите добавить пользовательский разделитель, вы можете добавить его в свой пользовательский макет контента.