Textview: использование стиля заголовка диалога: @android: style/TextAppearance.DialogWindowTitle
В настоящее время я пытаюсь создать собственную тему DialogFragment.
Одно из моих требований - использовать значок справа от заголовка.
Первая идея
Просто используя:
this.getDialog().getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.dialog_title);
Но, к сожалению, эта строка кода не имеет результата.
Вторая идея
Подстановка моего собственного макета -this.setContentView() - с помощью этого текстового представления:
<TextView
android:id="@+id/tvTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="From XML"
android:textAppearance="@android:style/TextAppearance.DialogWindowTitle" />
Это работает, потому что я могу читать текст, но он все еще написан черным шрифтом по умолчанию.
Я ожидал TextAppearance.DialogWindowTitle, чтобы дать моему тексту заголовок (синий в Holo с большим размером шрифта)
Любая идея или предложение?
ИЗМЕНИТЬ
Это почти трюк:
<style name="Dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowTitleStyle">@style/MyOwnDialogTitle</item>
</style>
<style name="MyOwnDialogTitle">
<item name="android:drawableRight">@drawable/MyRightImage</item>
</style>
но android: drawableRight просто сломал макет названия:
![enter image description here]()
SECOND EDIT
Это немного лучше:
<style name="Dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowTitleStyle">@style/MyOwnDialogTitle</item>
</style>
<style name="MyOwnDialogTitle">
<item name="android:textAppearance">@android:style/TextAppearance.DialogWindowTitle</item>
<item name="android:drawableRight">@drawable/icon</item>
</style>
![enter image description here]()
Ответы
Ответ 1
Возможно, вы можете расширить стиль по умолчанию таким образом:
res/values/dialogstyles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowTitleStyle">@style/MyOwnDialogTitle</item>
</style>
<style name="MyOwnDialogTitle">
<item name="android:drawableRight">@drawable/MyRightImage</item>
</style>
</resources>
res/values-v11/dialogstyles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Dialog" parent="@android:style/Theme.Holo.Dialog">
<item name="android:windowTitleStyle">@style/MyOwnDialogTitle</item>
</style>
</resources>
И переопределите DialogFragment onCreate
:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.Dialog);
}
Рабочий пример
Ответ 2
Я ищу свое первое требование. но для второго требования, почему вы не пытаетесь изменить цвет в стиле TextAppearance.DialogWindowTitle со своим пользовательским стилем?
Я только что проверил ресурсы Android, где есть стиль, как показано ниже:
<style name="DialogWindowTitle">
<item name="android:maxLines">1</item>
<item name="android:scrollHorizontally">true</item>
<item name="android:textAppearance">@style/TextAppearance.DialogWindowTitle</item>
</style>
и для TextAppearance.DialogWindowTitle style:
<style name="TextAppearance.DialogWindowTitle">
<item name="android:textSize">18sp</item>
<item name="android:textStyle">normal</item>
<item name="android:textColor">?textColorPrimary</item>
</style>
Теперь вы можете изменить цвет стиля TextAppearance.DialogWindowTitle и сделать то, что вам нужно.
Надеюсь, вы поняли.
Не стесняйтесь комментировать.
Ответ 3
Вы пытались использовать @android:style/Theme.Holo.Light.Dialog
в качестве стилей parent
в стилях? Это будет работать только в Android 3+, потому что в более ранней версии нет темы Holo, но вы можете создать свой собственный, чтобы выглядеть как для более низких версий Android.