20

我目前正在尝试构建自己的 DialogFragment 主题。

我的要求之一是在标题右侧使用图标。

第一个想法

只需使用:

this.getDialog().getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.dialog_title);

但是很遗憾,这行代码没有结果。

第二个想法

用这个 textview 提供我自己的布局 -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 刚刚打破了标题布局:

在此处输入图像描述

第二次编辑

这有点好:

<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>

在此处输入图像描述

4

3 回答 3

19

也许您可以通过这种方式扩展默认样式:

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);
}

工作示例

于 2013-01-30T00:51:42.553 回答
1

我正在寻找您的第一个要求。但是对于第二个要求,为什么不尝试使用自定义样式将颜色更改为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 name="TextAppearance.DialogWindowTitle">
    <item name="android:textSize">18sp</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textColor">?textColorPrimary</item>
</style>

现在,您可以更改 TextAppearance.DialogWindowTitle 样式的颜色并随心所欲地进行操作。

希望你明白了。

随意发表评论。

于 2013-01-29T04:31:46.733 回答
0

您是否尝试过将其@android:style/Theme.Holo.Light.Dialog用作您parent的风格?这仅适用于 Android 3+,因为在早期版本中没有主题 Holo,但您可以创建自己的主题,使其看起来像较低版本的 Android。

于 2013-01-30T12:43:10.473 回答