【问题标题】:Android: Using default style in a custom dialog titleAndroid:在自定义对话框标题中使用默认样式
【发布时间】:2016-04-02 05:00:06
【问题描述】:

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

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

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

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

这是我的自定义标题的布局:

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

对我来说很明显我需要定义标题属性和布局的背景......但是自从几个小时以来我一直在爬网搜索如何获取默认标题视图的属性。

有什么想法吗?

【问题讨论】:

  • 颜色很简单。将文本颜色设置为提供的 Holo 蓝色。
  • 谢谢,但我希望我的标题具有对话框标题的应用程序默认主题。如果应用程序主题不是 Holo,这不起作用。

标签: android android-layout android-dialog


【解决方案1】:

看看这是不是你要找的东西:

<?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 目录> 平台> android-XX(例如17)> 数据> res > 布局> 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>

【讨论】:

  • 非常感谢您的研究,但我不是在寻找 Holo 主题中的标题是哪种颜色。我尝试创建一个通用小部件,使其适应应用程序的当前主题。尽管如此,在我看来,查看 Android 源代码似乎是一个非常好的主意。我会调查的。
  • @Jean-MarcAstesana 对不起,如果我给你的印象是“看,我找到了你要找的颜色”。我以为我在告诉你在哪里看。例如,如果您查看dialog_title_holo.xml(这是一个布局文件),您将获得一些关于 android 如何实现您在默认对话框中看到的视图的指针。 blue line 的定义与上面完全相同,只是属性 android:background="#ff33b5e5"android:background="@android:color/holo_blue_light"
  • @user255882 好的,我想(希望)我明白了。我看了一下 Android-18,它似乎有所不同。所以,我知道整个标题布局没有神奇的样式 id 可以应用于标题组件以具有应用程序的外观和感觉。我能做的最好的事情是使用 style="@android:style/TextAppearance.DeviceDefault.DialogWindowTitle" 作为标题字段(在 API14 之后的设备上,在此样式不存在之前)。不是吗?
  • @Jean-MarcAstesana The best I can do is to use style="@android:style/TextAppearance.DeviceDefault.DialogWindowTitle" for the title field。正确的。 (on devices after API14, before this style does not exist). Isn't it? 是的。假设您的 minSdkVersion 是 v13。您可以在res/values-v13/styles.xml 中根据@android:style/TextAppearance.DeviceDefault.DialogWindowTitle 指定自己的样式。然后,创建res/layout-v13/some_layout.xml,您可以在其中使用自己创建的样式。要做到这一点需要做很多工作。
  • 非常感谢。如果内置不是他们想要的,我会听从你的建议并为我的对话框的用户提供一种方法来指定他们自己的标题布局。
【解决方案2】:

如果你只想使用设备默认,不需要自定义或扩展任何东西,你可以简单地添加:

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

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

如果您总是想显示蓝色(全息主题)标题,无论设备默认设置如何,您都可以添加:

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

改为。

【讨论】:

    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2015-04-09
    相关资源
    最近更新 更多