我试图通过以下方式禁用首选项(我非常想在这里设置所有可能的设置):
SettingsActivity.SettingsFragment pfc = SettingsActivity.settings;
if (pfc != null) {
Preference qtl = pfc.findPreference("use_tts");
if (qtl != null) {
qtl.setShouldDisableView(true);
qtl.setSelectable(false);
qtl.setEnabled(false);
qtl.setVisible(false);
qtl.setPersistent(true);
}
}
在此之后,我检查了(在调试中)qtl.mEnabled,它为false。但是,在打开“首选项”选项卡后,无论如何都会启用它。我的SettingsActivity.java:
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.PreferenceFragmentCompat;
public class SettingsActivity extends AppCompatActivity {
public static SettingsFragment settings = null;
public static <T extends BaseActivity> void start(T activity) {
activity.startActivity(new Intent(activity, SettingsActivity.class));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
if (settings == null) settings = new SettingsFragment();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportFragmentManager()
.beginTransaction()
.replace(android.R.id.content, settings)
.commit();
}
public static class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(final Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
}
}
}
activity_settings.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/activity_settings" >
</FrameLayout>
我在调试中检查到,偏好设置在onCreate中保持禁用状态。但是之后,它就启用了。
实际上,我在Preference.java中发现,mEnabled是这样设置的:
mEnabled = TypedArrayUtils.getBoolean(a, R.styleable.Preference_enabled,
R.styleable.Preference_android_enabled, true);
所以我想这就是将其设置为true的地方。
有人告诉我我在做什么错了吗?