gpt4 book ai didi

android - 主题中的自定义项目

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:39 25 4
gpt4 key购买 nike

我想创建我将在我的 TextView 的 android:textAppearance 中使用的样式。但是这种风格在不同的 API 级别上有所不同,所以我想要:

  • 一种通用样式(适用于所有 API 级别),
  • 在 values-v16、values-v21 目录中继承该通用样式的一些样式,
  • 一个指令(样式/属性?)我将放入 TextView 的 android:textAppearance 参数(布局文件对于所有 API 级别都是通用的)。

我尝试了 Google 和 Stack 的多种组合,最后以这样的方式结束(这当然行不通):

值/attrs.xml

<attr name="myTextAppearance" format="reference" />

值/styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="myTextAppearance">@style/CommonTextAppearance</item>
</style>

<style name="CommonTextAppearance">
<item name="android:textColor">#00f</item>
</style>

values-v16/styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="myTextAppearance">@style/V16TextAppearance</item>
</style>

<style name="V16TextAppearance" parent="CommonTextAppearance">
<item name="android:textSize">20sp</item>
</style>

layout/activity_main.xml

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@android:id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Lorem"
android:textAppearance="?attr/myTextAppearance"/>

</RelativeLayout>

目前我收到一个错误:

Couldn't find theme resource ?attr/myTextAppearance for the current theme

我花了很多时间尝试自己做这件事,但我失败了。你能帮帮我吗?

最佳答案

这是因为 ?attr/[name] 值是对所有者样式参数的引用。如果 [name] 没有参数,代码将回退到主题中定义的默认参数集。

基本上,TextView 类检查布局 xml 中定义的内联样式,然后是默认主题,然后是 textViewStyle 引用。它们都不包含您的 myTextAppearance 属性。

您必须覆盖 View 并在构造函数中使用 obtainStyledAttributes。将您的主题属性作为默认属性传递。然后解析该值并将其用作新的文本外观。

http://developer.android.com/reference/android/content/res/Resources.Theme.html#obtainStyledAttributes(android.util.AttributeSet,int[],int,int)

http://developer.android.com/reference/android/view/View.html#View(android.content.Context,android.util.AttributeSet,int)

关于android - 主题中的自定义项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27767247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com