Подтвердить что ты не робот

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

4b9b3361

Ответ 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.