#android #android-layout #accessibility #android-accessibility
#Android #android-макет #Специальные возможности
Вопрос:
Если мы изменим шрифт специальных возможностей с большого на маленький или с маленького на большой и вернемся в приложение, видимость представлений не сохраняется; это означает, что если представление невидимо или исчезло в приложении, а размер шрифта изменен в доступности и возвращается обратно в приложение, мы увидимэтот вид виден.
Пример,
class MainActivity : AppCompatActivity(R.layout.activity_main) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
findViewById<Button>(R.id.b3).setOnClickListener {
findViewById<Button>(R.id.b2).visibility = GONE
}
}
}
Макет:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@ id/b1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="something" />
<Button
android:id="@ id/b2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="something big" />
<Button
android:id="@ id/b3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="click"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@ id/layout" />
</LinearLayout>
Теперь нажмите на кнопку «нажать» и перейдите в настройки-> доступность-> шрифт-> ИЗМЕНИТЬ и верните приложение. Скрытая кнопка снова видна.
Есть ли какой-либо обходной путь, кроме сохранения значений в других переменных и установки их позже?
Ответ №1:
Теперь нажмите на кнопку «нажать» и перейдите в настройки-> доступность-> шрифт-> ИЗМЕНИТЬ и верните приложение. Скрытая кнопка снова видна.
Происходит изменение конфигурации. Существует множество изменений конфигурации, таких как:
- Изменение ориентации (для приложений, поддерживающих книжную и альбомную ориентацию)
- Включить / отключить темный режим
- Изменение локали / языка
- Изменение размера окна (для многооконных сред с разделенным экраном и произвольной формой)
- Изменение масштаба шрифта или масштаба плотности («масштабирование экрана»)
- И так далее
Есть ли какой-либо обходной путь, кроме сохранения значений в других переменных и установки их позже?
Как правило, это тоже не сработает. Ваша существующая активность уничтожается и воссоздается заново. Любые поля в старой активности исчезают, когда происходит старая активность.
Документация описывает изменения конфигурации, как и любая приличная книга или курс по разработке приложений для Android. Ваши основные параметры:
- Используйте сохраненное состояние экземпляра
Bundle
или aViewModel
для хранения данных, которые затем можно использовать в новом действии, чтобы восстановить пользовательский интерфейс в любом состоянии, в котором он должен быть после изменения конфигурации; или - Откажитесь от изменений конфигурации и обработайте все обновления пользовательского интерфейса самостоятельно (например, установите весь отображаемый текст на новый язык для изменения локали)
Первый является типичным подходом для View
разработки пользовательского интерфейса на классической основе, как вы это делаете. Последнее набирает популярность благодаря Jetpack Compose, который обрабатывает изменения конфигурации как часть существующей системы перекомпозиции.