匹配自定义首选项的文本样式和填充
Match text style and padding of custom preference
在我的应用程序的首选项片段中,我有一个自定义首选项(它是一个滑块视图首选项)。功能运行良好,但我无法让首选项的视觉外观与其他首选项相匹配。
所有搜索都指向使用 style="?android:textAppearanceLarge"
,但这会导致标题字体比其他首选项大得多,而且颜色也不匹配。
此外,整个偏好视图的填充似乎不正确。
我尝试使用 style="?android:preferenceStyle
,但那绝对没有任何效果。该应用程序使用 AppCompat.Light.DarkActionBar
主题。这是它的样子。显然,这样不好-我需要匹配其他偏好的样式。
所以,问题是如何匹配首选项布局的样式,以便在标题上具有正确的填充和正确的字体?
更新: 在进一步研究之后,我使用 style="?attr:textAppearanceMedium"
获得了匹配的标题样式。我仍在寻找匹配填充的方法。
我知道这个 post 有点老了。也许您已经找到了解决方案。但是对于遇到同样问题的所有其他人(比如我),让我向您展示对我有用的解决方案:
我的偏好 class 有几个构造函数。其中之一是 “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 设置布局,因为前者使用 widget 布局,而后者使用 widget 布局单独布局。
在我的应用程序的首选项片段中,我有一个自定义首选项(它是一个滑块视图首选项)。功能运行良好,但我无法让首选项的视觉外观与其他首选项相匹配。
所有搜索都指向使用 style="?android:textAppearanceLarge"
,但这会导致标题字体比其他首选项大得多,而且颜色也不匹配。
此外,整个偏好视图的填充似乎不正确。
我尝试使用 style="?android:preferenceStyle
,但那绝对没有任何效果。该应用程序使用 AppCompat.Light.DarkActionBar
主题。这是它的样子。显然,这样不好-我需要匹配其他偏好的样式。
所以,问题是如何匹配首选项布局的样式,以便在标题上具有正确的填充和正确的字体?
更新: 在进一步研究之后,我使用 style="?attr:textAppearanceMedium"
获得了匹配的标题样式。我仍在寻找匹配填充的方法。
我知道这个 post 有点老了。也许您已经找到了解决方案。但是对于遇到同样问题的所有其他人(比如我),让我向您展示对我有用的解决方案:
我的偏好 class 有几个构造函数。其中之一是 “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 设置布局,因为前者使用 widget 布局,而后者使用 widget 布局单独布局。