目前,我的设置活动为我提供了两种字体大小。所有预定义首选项的一个文本大小和一个自定义首选项的文本大小。首选项xml看起来像这样。自定义首选项从Dialog Preference扩展。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
>
<CheckBoxPreference
android:key="changemode"
android:title="@string/change_mode"
android:defaultValue="true"
android:summary="@string/change_mode_summary"
/>
<org.myapp.settings.NumberPickerPreference
android:id="@+id/pref_num_picker_pref"
android:key="@string/number_of_uploads"
android:title="@string/number_of_uploads"
/>
</PreferenceScreen>
这是什么原因?由于没有任何首选项具有预定义的文本大小,有没有办法解决这个问题而不添加textize属性?
答案 0 :(得分:0)
如果您膨胀或创建自己的(文本)视图,则应确保它们具有与默认实现相同的样式。
从this source layout开始,似乎他们使用textAppearanceMedium作为标题,使用textAppearanceSmall作为摘要。
因此,在标题的自定义布局中,您应该使用
<!-- for title -->
android:textAppearance="?android:attr/textAppearanceMedium"
<!-- for summary or description -->
android:textAppearance="?android:attr/textAppearanceSmall"
如果您只是祈祷创建视图(在这种情况下您可能不应该这样做),您可以使用
// for title
titleView.setTextAppearance(android.R.style.TextAppearance_DeviceDefault_Medium);
// for summary
titleView.setTextAppearance(android.R.style.TextAppearance_DeviceDefault_Small);
答案 1 :(得分:0)
在用于自定义对话框(扩展DialogPreference的对话框)的类的构造函数中,您必须指定
R.attr.dialogPreferenceStyle
例如:
public class YourPreference extends DialogPreference {
public YourPreference(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.dialogPreferenceStyle);
}
(...)
}
答案 2 :(得分:0)
添加到@MichaelZet的答案中,我遇到了类似的情况,即PreferenceScreen元素具有3个子元素,分别是switchPreference,List Preference和customTimePreference。 但是customTimePreference是扩展DialogPreference的自定义类。问题在于前两个条目(switchPreference,ListPreference)的标题,摘要textSize小/相同,但是customTimePreference的标题比前两个元素大。
问题是,我的customTimePreference的超级构造函数(DialogPreference构造函数)具有defStyleAttr参数,这是PreferenceScreen的子元素(第三个屏幕项目)和单击的弹出对话框dialogPreference(customTimePreference)的默认样式,我正在传递该属性的值为0,表示不按照下面显示的https://stackoverflow.com/a/6784919/11971304给出的答案查找默认值。
defStyleAttr 当前主题中的一个属性,该属性包含对样式资源的引用,该样式资源为StyledAttributes提供默认值。可以为0表示不查找默认值。
defStyleRes 样式资源的资源标识符,该样式资源提供StyledAttributes的默认值,仅在defStyleAttr为0或在主题中找不到时使用。可以为0表示不查找默认值。
传递android.R.attr.dialogPreferenceStyle使其使用PrefrenceScreen上的默认样式,并与其他元素标题大小的外观保持一致。
<PreferenceScreen android:title="Settings">
<SwitchPreference
android:defaultValue="..."
android:key="..."
android:summary="Switch Summary"
android:title="Enable Switch" />
<ListPreference
android:dialogTitle="Please Select"
android:entries="@array/list_ids"
android:entryValues="@array/list_values"
android:key="..."
android:title="Selection List popup" />
<com.android.example.customTimePreference
android:key="..."
android:title="Clock Dialog popup"/>
</PreferenceScreen>
public TimePreference(Context context) {
this(context, null);
this.context = context;
}
public TimePreference(Context context, AttributeSet attrs) {
//this(context, attrs, 0); //default not supplied causing incorrect textSize
this(context, attrs, android.R.attr.dialogPreferenceStyle);
this.context = context;
}
public TimePreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.picker = null;
setPositiveButtonText(R.string.ok);
setNegativeButtonText(R.string.cancel);
this.calendar = new GregorianCalendar();
this.context = context;
}