- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
UPDATE: As pointed out in the comments, 'Widget.AppCompat.EditText' is the correct parent style for an AppCompatEditText subclass. In my case, the real issue was I had forgotten to assign a value to our control's default style attribute in our theme, so our control wasn't getting any style to use as a default.
However, this question still could use an answer as to how one properly identifies which style to use as a parent when defining your own default styles when subclassing the standard controls. As such, I've also renamed its title.
As such, I'm leaving this open in hopes someone can answer that question since it will help any who wish to do something similar.
我们正在尝试为整个应用程序中使用的所有 AppCompatEditText 控件定义一个通用的外观。因此,我们不必在每次使用时手动应用“样式”属性,而是尝试用我们自己的样式替换默认样式。
替换默认样式实际上是比较容易的部分。不知道我们样式的父样式应该设置成什么,这样我们仍然拥有原始样式的所有方面,我们还没有用我们的样式明确覆盖这些方面。
深入研究 AppCompatEditText 的源代码,它显示了要存储在 R.attr.editTextStyle
中的默认样式,但我不确定现在在哪里查看其中存储的值.
实验也没有让我们取得任何进展。到目前为止,无论我们尝试了什么,我们都完全失去了默认外观。没有下划线,没有背景,没有填充,什么都没有。只是我们设置的值,这意味着它没有选择父样式。
我们尝试了以下但没有成功......
<style name="ZinEditText" parent="android:Widget.EditText">
<item name="zinTypeface">light</item>
<item name="android:textSize">@dimen/defaultTextSize</item>
<item name="android:lineSpacingMultiplier">@dimen/defaultLineSpacing</item>
</style>
<style name="ZinEditText" parent="Widget.AppCompat.EditText">
<item name="zinTypeface">light</item>
<item name="android:textSize">@dimen/defaultTextSize</item>
<item name="android:lineSpacingMultiplier">@dimen/defaultLineSpacing</item>
</style>
<style name="ZinEditText" parent="Base.V7.Widget.AppCompat.EditText">
<item name="zinTypeface">light</item>
<item name="android:textSize">@dimen/defaultTextSize</item>
<item name="android:lineSpacingMultiplier">@dimen/defaultLineSpacing</item>
</style>
<style name="ZinEditText" parent="Widget.Holo.EditText">
<item name="zinTypeface">light</item>
<item name="android:textSize">@dimen/defaultTextSize</item>
<item name="android:lineSpacingMultiplier">@dimen/defaultLineSpacing</item>
</style>
正如我所说,以上似乎都不起作用。
那么如何找到要使用的实际父级样式呢?
最佳答案
为了解决眼前的问题,AppCompatEditText
的默认样式是 Widget.AppCompat.EditText
。您展示的第二个示例是正确的:
<style name="ZinEditText" parent="Widget.AppCompat.EditText">
...
这需要在您的应用主题中设置为 editTextStyle
。
<style name="AppTheme" parent="@style/Theme.AppCompat">
<item name="editTextStyle">@style/ZinEditText</item>
...
据我所知,在任何地方官方都没有很好地记录如何找到这些默认样式和属性。 Styles and Themes 的官方文档只需将一个人定向到框架和支持包的各种 R.attr
页面,以“发现”可用的内容。但是,对于大多数允许默认样式的 View
,找到它的通常可靠的方法是检查源代码。
View
子类通常会实现至少三个构造函数:一个只需要一个Context
;一个接受 Context
和 AttributeSet
的;和一个采用 Context
、AttributeSet
和 int
的 defStyleAttr
,默认样式属性。这个属性就是我们要找的。它通常会有一个合理的名称,如 editTextStyle
、textViewStyle
、checkboxStyle
等。如果您已经知道名称,则可以跳过检查查看
它的类。
在链接其构造函数的 View
中,此属性通常在从二参数构造函数调用三参数构造函数时出现。在 AppCompatEditText
,我们可以看到这个属性的名字是editTextStyle
。
public AppCompatEditText(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.editTextStyle);
}
在我们得到属性的名称后,我们然后前往平台的 res/values/
目录或 View
所在的支持包。默认值将在您应用的父主题的相关 themes*.xml
文件中。
对于平台主题,有一个基础 themes.xml
, 和一个 few others适用于特定主题版本,例如 Holo 和 Material。
对于支持库View
,这些主题文件将在包特定的res/values/
目录下,默认属性值可能在 themes.xml
或 themes_base.xml
。
在 v7 appcompat 中,我们应用的确切父主题可能在 v7/appcompat/res/values/themes.xml
中,尽管大多数主题只是基本主题的直接别名;也就是说,他们不会覆盖他们 parent 的任何属性值。 AppCompatEditText
的默认值实际上在 v7/appcompat/res/values/themes_base.xml
中.不同主题有不同的条目 - 常规主题和浅色主题 - 但它们都是相同的。
<item name="editTextStyle">@style/Widget.AppCompat.EditText</item>
这足以确定使用哪种样式作为我们的父级,但如果我们想查看样式细节,我们可以引用 v7/appcompat/res/values/styles.xml
,我们在其中找到该样式的父项:
<style name="Widget.AppCompat.EditText" parent="Base.Widget.AppCompat.EditText"/>
这导致我们 v7/appcompat/res/values/styles_base.xml
:
<style name="Base.Widget.AppCompat.EditText" parent="Base.V7.Widget.AppCompat.EditText" />
<style name="Base.V7.Widget.AppCompat.EditText" parent="android:Widget.EditText">
<item name="android:background">?attr/editTextBackground</item>
<item name="android:textColor">?attr/editTextColor</item>
<item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item>
</style>
关于android - 如何找到小部件的默认样式(即 AppCompatEditText),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45695647/
我喜欢调整 目录的样式(例如背景颜色、字体)预订 , Gitbook 风格 HTML 文档。 这可能吗?如果是这样,有人可以善意地指出我可以开始这样做的地方吗? 谢谢你。 最佳答案 两个步骤: 1)
是否可以使用纯 CSS 选择器根据子节点的兄弟节点数量为节点子节点(在我的例子中为 UL)提供不同的属性,特别是高度? 例如,如果一个节点有 1 个子节点,则 UL 的高度是自动的,但是如果该节点有
我正在与 Vala 一起工作,它首先编译为 C,然后正常从 C 编译。 valac 的一项功能(Vala 编译器)是为 .vala 生成“fast-vapi”文件。 fast-vapi 本质上是为 .
我有两个具有 .body 类的 div,但是,一个位于另一个具有 .box 类的 div 中 - 如下所示: 我只想为 .box 内部的 .body 设置样式...但我在下面所
**注意所有 <> 标签已被删除以允许代码显示**我已经玩了好几个小时了,如果不在设计结束时使用解决方法(即 Corel 绘图),我就无法真正让它工作 *在我继续之前, 首先,网站 URL 是 Adv
我从一个服务中接收到一个字符串,该字符串显然使用 UTF-32 编码对其 unicode 字符进行编码,例如:\U0001B000(C 风格的 unicode 编码)。但是,为了在 JSON 中序列化
我在应用程序资源中有一种样式,我想将其应用于许多不同的饼图。样式如下所示: 为了简单起见,我排除了更多的属性。这一切都很好。现在,我的一些馅饼需要有一个不同的“模型
想象一下,我有一个名为“MyCheckBoxStyle”的 CheckBox 自定义样式。 如何制作基于 MyCheckBoxStyle 嵌入自定义 DataGridCheckBoxColumn 样式
我有一个 Button我在 WPF 中开发的样式,如 this question 中所述.我想用这种风格做的另一件事是拥有 Button缩小一点点,使其看起来像被点击一样被点击。现在,转换代码如下所示
我为超链接控件创建了一个样式:
不知道为什么,但我的 typeahead.js 远程自动完成停止工作。我没有更改任何关于 typeahead.js 的代码,但既然它坏了,我一定是错的。你能看看我的site here吗? ?我会创建
有没有办法创建扩展当前样式的样式,即不是特定样式? 我有一个 WPF 应用程序,我在其中创建样式来设置一些属性,例如边框或验证。 现在我想尝试一些主题,看看哪
我正在为一个网站提出问题,并希望 var reltext 中的正确/再试消息具有不同的颜色,即绿色表示正确,红色表示错误,并且每个旁边可能有一个小 png。 有什么想法吗? A local co
我想到达列表的父节点(使用 id 选择器)并使用纯 JavaScript 添加背景颜色来设置其样式。这是我的代码,但不起作用。 var listParentNode; listPare
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 4 年前。 Improve th
过去几天我一直在与这段代码作斗争,我真的不知道该如何处理它。 基本上,当用户将鼠标滚动到主导航菜单中的某个 LI 元素上时,就会运行一个 Javascript 函数,并根据触发该函数的元素将链接放入下
使用这个可爱的 html 和 css 作为指南,我能够在我的照片上显示我的姓名首字母。 这很好,但是,如果图像不存在,我只想显示首字母;如果图像存在,则不应渲染 peron 首字母。 换句话说,当该图
使用这个可爱的 html 和 css 作为指南,我能够在我的照片上显示我的姓名首字母。 这很好,但是,如果图像不存在,我只想显示首字母;如果图像存在,则不应渲染 peron 首字母。 换句话说,当该图
是否有人尝试过将 JButton 设计为看起来像 NetBeans 工具栏按钮?这将只显示一张图片,当您将鼠标悬停在它上面时,会显示 1px 圆形角灰色边框,并且按钮顶部和底部的背景不同......似
在 Ax2012 中使用图表,它们工作正常。但我想更改它在启动时显示的图表类型,例如“样条”图表,而不是默认的“柱状图”图表。 这是我现在拥有的: http://i.stack.imgur.com/R
我是一名优秀的程序员,十分优秀!