在PreferenceScreen的首选项中添加TextView

时间:2013-03-14 07:41:54

标签: android android-layout

在此首选项屏幕中,用户取消设备与其帐户的链接。目前我将其作为Unlink设备,一旦用户点击它,就会发生取消链接。

但我想添加一个这样的文本:

Joe Foo的设备(joefoo@gmail.com) - 取消关联设备

嘿,我会这样做吗?我还需要从settingsActivity动态添加用户名。

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

     <Preference android:title="@string/pref_title_advanced_unlink" >
         <TextView somehow must be in here
            android:id="@id/user_name_and_email" />

         <intent android:action="android.intent.action.VIEW"
            android:targetPackage="com.example.tvrplayer"
            android:targetClass="com.example.tvrplayer.UnlinkActivity" 
            android.setflags="FLAG_ACTIVITY_CLEAR_TOP"/>
    </Preference>

</PreferenceScreen>

2 个答案:

答案 0 :(得分:2)

首选项有一个名为summary的副标题。为您的首选项提供密钥,然后您可以在PreferenceFragment中使用findPreference(CharSequence key)来获取对首选项对象的引用,有点像调用findViewById来获取对Views的引用。然后在首选项对象上调用setSummary(int)setSummary(CharSequence)

或者,您可以通过为首选项对象和/或子类Preference提供自定义布局来实现更复杂的操作,并实现一些自定义数据绑定。但我认为上面应该做你想做的事。

答案 1 :(得分:2)

enter image description here

<强>的preferences.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory
        android:key="pref_title_advanced"
        android:title="Advanced" >
        <CheckBoxPreference
            android:defaultValue="false"
            android:key="pref_title_advanced_link"
            android:title="Link Device" />
    </PreferenceCategory>
</PreferenceScreen>

<强> PrefsActivity.java

private SharedPreferences mPreferences;
private SharedPreferences.OnSharedPreferenceChangeListener mPrefListener;
private CheckBoxPreference mCheckBoxPref;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);

    mCheckBoxPref = (CheckBoxPreference) getPreferenceScreen().findPreference(
            "pref_title_advanced_link");
    /*
     * set initial summary as you desire. For example, userIdCurrent can be:
     * "No Devices linked."
     */
    mCheckBoxPref.setSummary(userIdCurrent);

    mPrefListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
        public void onSharedPreferenceChanged(SharedPreferences prefs,
                String key) {
            if (key.equals("pref_title_advanced_link")) {
                /*
                 * set post-click summary as you desire. For example,
                 * userIdPost can be:
                 * "Joe Foo's Device (joefoo@gmail.com)".
                 */
                mCheckBoxPref.setSummary(userIdPost);
            }
        }
    };
    mPreferences.registerOnSharedPreferenceChangeListener(mPrefListener);
}