android - 自定义首选项类别标题

标签 android android-layout android-preferences preferenceactivity

我有一个这样定义的简单首选项屏幕

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="Security">
        <CheckBoxPreference 
            android:title="Require Pin on Start"
            android:summary="Require pin to run the application"
            android:key="@string/pref_require_pin"
            android:defaultValue="false" />
    </PreferenceCategory>

    <PreferenceCategory android:title="Settings">
        <ListPreference
           android:title="History Age (in days)"
           android:summary="Display items up to 30 days old"
           android:key="@string/pref_history_days"
           android:defaultValue="30"
           android:entries="@array/days_list"
           android:entryValues="@array/days_list"
           android:dialogTitle="Select History Age"/>
    </PreferenceCategory>
</PreferenceScreen>

我已经有一个样式设置并在我的应用程序的其他地方使用。

<style name="ListHeader">
    <item name="android:textColor">#000000</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">12sp</item>
    <item name="android:background">#cccccc</item>
    <item name="android:paddingTop">6px</item>
    <item name="android:paddingBottom">6px</item>
    <item name="android:paddingLeft">12px</item>
</style>

这是我的 Activity

public class PreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.layout.preferences);
    }
}

如何将我的自定义样式应用到 PreferenceCategory 标题?

最佳答案

你应该看看Preference.Category风格:

<style name="Preference.Category">
    <item name="android:layout">@android:layout/preference_category</item>
   <item name="android:shouldDisableView">false</item>
   <item name="android:selectable">false</item>
</style>

我们来看看preference_category.xml文件:

<!-- Layout used for PreferenceCategory in a PreferenceActivity. -->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    style="?android:attr/listSeparatorTextViewStyle"
    android:id="@+android:id/title"
/>

因此,您需要创建自定义主题来扩展默认的 android Theme 并使用 ListHeader 样式覆盖 listSeparatorTextViewStyle 值。然后将此主题应用于扩展 PreferenceActivity 的 Activity。


您可以这样做。

首先,在您的 styles.xml 中添加下一个代码:

<style name="PreferenceListHeader" 
       parent="@android:style/Widget.TextView.ListSeparator">

    <item name="android:textColor">#000000</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">12sp</item>
    <item name="android:background">#cccccc</item>
    <item name="android:paddingTop">6px</item>
    <item name="android:paddingBottom">6px</item>
    <item name="android:paddingLeft">12px</item>
</style>

<style name="Theme.Custom" parent="@android:style/Theme">
    <item name="android:listSeparatorTextViewStyle">@style/PreferenceListHeader</item>               
</style>

然后在您的 AndroidManifest.xml 中将主题添加到您的偏好 Activity 中:

 <activity android:name=".MyPreferencesActivity" 
           android:theme="@style/Theme.Custom" 
           ... >
 ...
 </activity>

这是截图:

enter image description here

关于android - 自定义首选项类别标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6297635/

相关文章:

android - 一个ScrollView不能添加多个 View 吗?

android studio 2.2 布局编辑器刷新按钮

android - 应用程序只有 BroadcastReceiver 不起作用

android - 如何将我的应用程序添加到 Android 默认拨号器选择中?

android - AsyncLayoutInflator 陷阱

android - 监听 MainActivity 中的 SharedPreferences 更改

android - 获取 ListPreference 选择的键,而不是值 - 可能吗?

java - 滚动到 ListPreference 中的选定项目

java - Android SQLite 找不到声明的列

java - 使用 appium 运行测试脚本时出现 SecurtyException