【发布时间】:2017-08-15 15:02:19
【问题描述】:
更新: 正如 cmets 中所指出的,“Widget.AppCompat.EditText”是 AppCompatEditText 子类的正确父样式。就我而言,真正的问题是我忘记在主题中为控件的默认样式属性赋值,因此我们的控件没有任何样式可用作默认样式。
但是,这个问题仍然可以使用一个答案,即在子类化标准控件时定义您自己的默认样式时如何正确识别用作父样式的样式。因此,我也重命名了它的标题。
因此,我将这个问题保持开放状态,希望有人能回答这个问题,因为它会帮助任何希望做类似事情的人。
我们正在尝试为整个应用程序中使用的所有 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>
正如我所说,上述方法似乎都不起作用。
那么如何找到要使用的实际父样式呢?
【问题讨论】:
-
默认为
Widget.AppCompat.EditText。你是如何设置风格的? -
@#$$!我忘记将我们的样式分配给我们的样式属性。你是对的。这种风格一直有效。
-
发布您的答案作为答案,包括我遗漏的部分,我会将您的标记为已接受。比自己回答这个问题或让它打开要好。另外,您可以获得积分。
-
我们都去过那里。 :-) 这只是一个简单的疏忽。如果你想把它称为免费赠品,我不介意你只是想删除它。由你决定。很高兴你成功了。
-
实际上,更好的是,因为从技术上讲,我的问题是关于如何知道默认样式是什么,即使这不是我实际问题的根源,这个问题仍然可以使用答案。你马上就知道那是什么了。介意写下你是如何查找的,以便其他从事其他组件工作的人也知道去哪里吗?例如,按钮、单选按钮和复选框呢?基本上任何标准控件。