Как организовать в настройках приложения функцию скрыть/показать textview. Пытался с помощью SharedPreferences, но так и понял.
Как вписывать в файл настроек? Как читать из файла?
Файл настроек:
public class setting1 extends PreferenceFragment {
public void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_notification);
}
}
xml:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreference
android:key="hidetext"
android:summaryOff="Перевод выключен"
android:summaryOn="Перевод включен"
android:title="@string/pref_title_new_message_notifications"
/>
Вот примерный каркас, как контролировать изменения в настройках:
Делаете класс настроек:
public class AppSettings extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
}
public static class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref);
}
}
}
разметка settings.xml (путь до фрагмента в атрибуте android:name
у вас будет свой в зависимости от пакетов):
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<fragment
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:name="com.example.app.AppSettings$PrefsFragment"
android:id="@+id/pref_fragment" />
</FrameLayout>
Сам XML настроек с чекбоксом pref.xml помещаем в папку res/xml (ключ настройки указываем hide_text):
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/tittle_settings">
<CheckBoxPreference
android:title="@string/show_hidden_text"
android:defaultValue="false"
android:key="hide_text" />
</PreferenceCategory>
</PreferenceScreen>
В меню приложения делаете пункт "Настройки", который будет вызывать активити AppSettings
(этого нет в коде ответа, так как не относится к вопросу)
Код для контроля за состоянием этой настройки в той активити, в которой используется какая то настройка (в вашем случае, где нужно скрывать\показывать текст):
public class SomeActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener{
private SharedPreferences mPreference;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
textView = findViewById(R.id.textView);
// получаем экземпляр настроек
mPreference = PreferenceManager.getDefaultSharedPreferences(this);
// регистрируем слушатель
mPreference.registerOnSharedPreferenceChangeListener(this);
// Устанавливаем актуальное состояние настройки при создании активити
boolean isHide = mPreference.getBoolean("hide_text", false);
textView.setVisibility(isHide ? View.GONE : View.VISIBLE);
}
@Override
protected void onDestroy() {
super.onDestroy();
// отписываемся от слушателя
mPreference.unregisterOnSharedPreferenceChangeListener(this);
}
// этот метод сработает, когда в любом ключе настроек произойдут изменения значения
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// проверяем изменилось ли значение нашего ключа hide_text
if (key.equals("hide_text")) {
// если изменилось - вносим эти изменения
boolean isHide = mPreference.getBoolean("hide_text", false);
textView.setVisibility(isHide ? View.GONE : View.VISIBLE);
};
}
}
Записывать новые значения или размещать какие то чекбоксы на разметке никуда не нужно, это произойдет автоматически при изменении чекбокса в настройках, а сам чекбокс уже задан в xml-файле pref.xml.
Все это будет работать следующим образом. При первом старте у вас будет показываться текст в TextView
(значение настройки по умолчанию - false)/ Если надо изменить видимость текста, вы вызываете меню приложения и выбираете пункт "Настройки", там переключаете чекбокс и после выхода из настроек и возвата на активити с TextView
, текст в ней будет скрыт или показан, в зависимости от состояния чекбокса в настройках.
Хотите улучшить этот вопрос? Update the question so it's on-topic for Stack Overflow на русском
Есть такая задача: найти максимальную последовательность единиц в матрицеПоследовательность может быть как горизонтальной так и вертикальной
Для чего сравнивать this, и любой Object o? В каких случая они могут оказаться равными?
Собственно, как скрыть/сделать не доступными некоторые методы класса? Например, перезаписанные public методы класса-родителя: