如何启用/禁用首选项?

时间:2014-03-16 23:56:54

标签: android android-preferences edittextpreference

我想让EditTextPreference不可编辑(例如,在“设置”页面中点击时没有任何反应)。我该怎么做?

这是我的代码:

<PreferenceCategory android:title="My Account" >

    <EditTextPreference
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:key="username_pref"
        android:summary="     "
        android:title="Username" >
    </EditTextPreference>

</PreferenceCategory>

4 个答案:

答案 0 :(得分:12)

您可以以编程方式或.xml方式执行此操作。

<强> XML:

<EditTextPreference
    android:enabled="false" >
</EditTextPreference>

<强>编程:

getPreferenceScreen().findPreference("yourpref").setEnabled(false);

来自Android文档:

  

“如果已停用,则偏好将无法处理点击次数。”

答案 1 :(得分:4)

迟到的答案但是根据对已接受答案的评论,似乎有些混乱。

我不同意禁用始终是不可编辑设置的正确选择。例如,在Android设置中:系统 - &gt;关于手机 - &gt;显示电话的状态信息,这些信息位于不可编辑的设置中,更像是用户可能需要的重要信息。由于它们永远不会从设置页面进行编辑,因此应该显示为正常的 Prefrence ,而不是显示为已停用的 EditTextPreference

<强> XML:

<Preference        
    android:key="username_pref"
    android:title="Username" >
</Preference>

这将使您可以点击,但不可编辑。

答案 2 :(得分:0)

@Rawa的回答帮助了我。我想添加一个解决方案,以动态添加不可编辑的首选项。在我的示例中,我添加了首选项以显示应用程序版本。请确保为首选项类别设置密钥。

onCreatePreferences中:

    // Add app version preference
    val appVersionPref = Preference(context).apply {
        title = "App Version"
        summary = "v${BuildConfig.VERSION_NAME}"
    }
    val aboutPrefCategory = findPreference<PreferenceCategory>("YOUR_PREF_CATEGORY_KEY")
    aboutPrefCategory?.addPreference(appVersionPref)

请参见下面的结果屏幕截图 App version preference screenshot

答案 3 :(得分:0)

要禁用点击并保持首选项不灰暗,请使用以下XML:

<EditTextPreference
android:enabled="false"
android:shouldDisableView="true" />

或者,使用以下Java代码:

EditTextPreference pref = (EditTextPreference)findPreference("yourkey");
pref.setEnabled(false);
pref.setShouldDisableView(false);