我正在为自定义视图而苦苦挣扎defStyleAttr
。(简短说明我使用的是一个Preference
示例,因为它与 Google 使用它的方式相同)
因此,对于 Android 提供的几乎每一个View
,Preference
你都会有一个这样的构造函数:
public SeekBarPreference(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.seekBarPreferenceStyle);
}
这将默认样式属性定义为R.attr.seekBarPreferenceStyle
.
如果您现在查看定义,您会发现:
<attr name="seekBarPreferenceStyle" format="reference" />
到现在一切都清楚了。但是这个属性以某种方式链接到一个主题:
<resources>
<style name="PreferenceThemeOverlay">
<!-- ... -->
<item name="seekBarPreferenceStyle">@style/Preference.SeekBarPreference.Material</item>
<!-- ... -->
</style>
<!-- ... -->
</resources>
然后最终将样式与所需的布局资源 id 链接起来,该布局资源 id 将被移交给要膨胀的超类:
<style name="Preference.SeekBarPreference.Material">
<item name="android:layout">@layout/preference_widget_seekbar_material</item>
<!-- ... -->
</style>
不幸的是,我无法找到有关主题如何PreferenceThemeOverlay
链接到属性的提示seekBarPreferenceStyle
。
那么这两者是如何联系起来的呢?