Android:在自定义对话框标题中使用默认样式

时间:2013-09-01 22:30:16

标签: android android-layout android-dialog

我正在尝试创建一个自定义多选警报对话框,允许用户一键选择/取消选择所有项目。 我使用带有附加复选框的自定义标题实现此目的。 一切正常,但我不知道如何使我的自定义标题看起来像默认的警告对话框标题(使用相同的样式)。

这是我正在尝试做的事情(该示例使用Dialogs documentation中的主题。这只是一个示例,我真正想要的是应用程序主题。)

enter image description here

我为自己使用的自定义标题创建了一个自定义视图,但我不知道如何获取默认样式标题栏的属性,因此,我获得了:

enter image description here

(标题下方没有蓝色条,标题颜色错误)

以下是我的自定义标题的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<TextView
    android:id="@+id/title"
    style="?android:attr/textAppearanceLarge"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="Dialog title" />

<TextView
    android:id="@+id/all"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="All" />

<CheckBox
    android:id="@+id/checkBox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</LinearLayout>

我觉得我需要定义标题属性和布局的背景......但我正在搜索如何获取默认标题视图属性的小时数。

有什么想法吗?

2 个答案:

答案 0 :(得分:10)

看看这是否是你要找的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/title"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="22sp"
            android:textColor="#ff33b5e5"
            android:text="Dialog title" />

        <TextView
            android:id="@+id/all"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="All" />

        <CheckBox
            android:id="@+id/checkBox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </LinearLayout>

    <View android:id="@+id/titleDivider"
        android:layout_width="match_parent"
        android:layout_height="2dip"
        android:background="#ff33b5e5" />

</LinearLayout>

我是怎么做到的:

浏览到硬盘上的sdk目录&gt;平台&gt; android-XX(例如17)&gt;数据&gt; res&gt;布局&gt; dialog_title_holo.xml。查看ID为titleDivider的视图。它的背景属性为:background="@android:color/holo_blue_light"。在res/values/colors.xml中查找此颜色的值。

来自styles_device_defaults.xml

<style name="TextAppearance.DeviceDefault.DialogWindowTitle" parent="TextAppearance.Holo.DialogWindowTitle" >

查看styles.xml

<style name="TextAppearance.Holo.DialogWindowTitle">
    <item name="android:textSize">22sp</item>
    <item name="android:textColor">@android:color/holo_blue_light</item>
</style>

textColor与线条颜色相同。文字大小指定为22sp。并且,style="?android:attr/textAppearanceLarge"不是必需的,因为我们正在设置textSize="22sp"

<style name="TextAppearance.Large">
    <item name="android:textSize">22sp</item>
</style>

答案 1 :(得分:0)

如果您只想使用设备默认设置,无需自定义或扩展任何内容,您只需添加:

android:textAppearance="@android:style/TextAppearance.DeviceDefault.DialogWindowTitle"

到xml布局中的标题视图。这将根据设备主题显示不同的样式。

如果您总是想要显示蓝色(Holo Theme)标题,无论设备默认设置如何,那么您可以添加:

android:textAppearance="@android:style/TextAppearance.Holo.DialogWindowTitle"

代替。