20

我正在尝试制作一个只有关于、联系人和法律选项的首选项屏幕,当单击所有这些选项时,只会在单独的页面中显示文本简介和图标,没有shared preferences或任何内容。

我无法理解层次结构以显示文本。我希望流程是:settings -> about -> the about text

目前我有这个,它给了我类别和选项,但我不知道要做什么才能显示新文本。

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory
            android:title="Info">
        <Preference android:title="About"/>


    </PreferenceCategory>
...
</PreferenceScreen>

我不知道使用什么选项来使关于可点击进入文本视图。

4

5 回答 5

43

A.Grandt 的解决方案在 Preference Activity 中提供了对文本块的非常好的模仿,但我会添加一个android:persistent="false"属性,以避免将这种“伪首选项”不必要地存储到 SharedPreferences 文件中以进行应用设置。

总结一下。正如 A.Grandt 建议的那样,在 Preferences Activity 中模仿 TextView 将是:

<Preference
    android:key="pref_static_field_key"
    android:selectable="false"
    android:persistent="false"
    android:title="you can omit the title"
    android:summary="Multi line description\ncan go here."/>

虽然您可以用于\n换行,但它不会调整 Preference Item 本身的大小,因此这些多行可能不会在仍然单行的 Preference Item 中完全可见。

于 2014-10-30T17:49:27.070 回答
25

我有同样的问题,需要显示一个静态文本块。尽管在我的情况下,它已排入首选项页面。

该标签确实允许链接,但这并不能解决对静态文本的需求。但是,Preference 标签本身可以。您可以让它显示文本、通常的标题行以及下面的文本摘要,两者都是可选的,然后使其不可选择。它会给人一种静态文本的错觉。

<Preference
    android:key="pref_static_field_key"
    android:selectable="false"
    android:title="you can omit the title"
    android:summary="Multi line description\ncan go here."/>
于 2013-08-22T13:21:15.940 回答
13

您不能在 a 中添加格式化的文本块PreferenceScreen,这不是它的本意。但是,您可以将 About 文本添加到另一个活动中(LinearLayout带有一些格式化TextView的 s 可能就足够了)。通过在首选项中传递一个意图来调用它:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >    
    <Preference 
        android:key="about"   
        android:title="About">           
            <intent android:action="your.package.path.to.Activity"/>           
    </Preference>
</PreferenceScreen>
于 2012-08-09T13:30:27.327 回答
9

我想添加一个文本块,但是以编程方式设置实际的文本内容。我的具体需求:在首选项屏幕顶部显示应用程序版本名称。

我按照A.GrandtKrzysiek的方法完成了它,并在代码中设置了摘要。

dev_preferences.xml

<Preference
    android:key="pref_app_version" 
    android:persistent="false"
    android:selectable="false"
    android:title="@string/app_name" />

偏好片段 ( extends PreferenceFragment):

  private static final String KEY_APP_VERSION = "pref_app_version";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.dev_preferences);

        findPreference(KEY_APP_VERSION).setSummary(BuildConfig.VERSION_NAME);
    }

通过在条目中进行设置,我最终还使用了自定义布局(如本答案所示)。(不是强制性的,但通过这种方式,您可以轻松自定义首选项“标题”的外观。)android:layout="@layout/dev_preferences_header"<Preference>

dev_preferences_header.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"       
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:padding="@dimen/spacing_small">

    <TextView
        android:id="@android:id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@android:id/summary"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@android:id/title" />

</RelativeLayout>
于 2017-04-12T14:08:41.890 回答
1

在我的设置页面中,我想显示我的应用程序数据的上次备份日期时间。

(灵感来自: https ://developer.android.com/reference/android/content/SharedPreferences.Editor )

1)在我的preference.xml中:

<PreferenceCategory app:title="Backup last execution">
    <EditTextPreference
        app:key="backup"
        app:selectable="false"
        app:summary="never"
        app:useSimpleSummaryProvider="true" />
</PreferenceCategory>

2)在我的类实用程序{伴随对象}中:

fun Utility.Companion.storeToPreferences(key:String, value:String){
       val sharedPref: SharedPreferences =
           PreferenceManager.getDefaultSharedPreferences(context)
       val editor = sharedPref.edit()
       editor.putString(key, value)
       editor.apply()
}

3)我的电话:

 Utility.storeToPreferences("backup", LAST_BACKUP)
于 2020-04-01T17:00:12.407 回答