匹配自定义偏好

时间:2015-11-12 14:11:04

标签: android preference

在我的应用偏好片段中,我有一个自定义偏好设置(它是一个滑块视图偏好设置)。功能运作良好,但我无法获得偏好的视觉外观以匹配其他偏好的外观。

所有搜索都指向使用style="?android:textAppearanceLarge",但这导致标题字体比其他首选项大得多,而且与颜色不匹配。

此外,整个偏好视图中的填充似乎不正确。 我尝试使用style="?android:preferenceStyle,但这绝对没有。该应用程序使用AppCompat.Light.DarkActionBar主题。这是它的样子。显然,这并不好 - 我需要匹配其他偏好的风格。

所以,问题是如何匹配首选项布局的样式以在标题上使用正确的填充和正确的字体?

enter image description here

更新:在进一步研究之后,我使用style="?attr:textAppearanceMedium"获得了匹配的标题样式。我还在寻找匹配填充的方法。

1 个答案:

答案 0 :(得分:4)

我知道这篇文章有点老了。也许你已经找到了解决方案。但对于有同样问题的所有其他人(比如我),让我向您展示对我有用的解决方案:

我的偏好类有几个构造函数。其中一个是“2参数构造函数”,它是在扩展XML布局时使用的 。 它通常看起来像这样

public MyPrefClass (Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public MyPrefClass(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    setWidgetLayoutResource(...)
}

这意味着,将调用3参数构造函数给出“0”作为StyleAttributes。这导致构造函数调用没有显式样式 - 即使在XML中定义。

所以我所要做的就是将第三个参数更改为所需的样式将2参数构造函数更改为:

public MyPrefClass (Context context, AttributeSet attrs) {
    this(context, attrs, android.R.attr.dialogPreferenceStyle);
}

解决了这个问题。偏好与其他偏好风格相同。

---编辑----

确保通过 setWidgetLayoutResource 而不是 setLayoutResource 设置布局,因为前者使用窗口小部件布局,而后者则使用单独的布局。

相关问题