可访问性字体更改不会保留视图可见性
accessibility font change does not preserve the view visibility
如果我们将辅助功能字体从大变小或从小变大然后返回到应用程序,视图的可见性将不会保留;这意味着如果视图在应用程序中不可见或消失,并且字体大小在辅助功能中更改并返回到应用程序,我们将看到该视图可见。
示例,
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>
现在,点击“点击”按钮,进入设置->辅助功能->字体->更改,然后返回应用程序。隐藏的按钮再次可见。
除了将值保留在其他变量中并稍后设置外,是否有任何解决方法?
Now, click on the "click" button and go to setting->accessibility->font->CHANGE and come back the app. The hidden button is visible again.
您正在进行配置更改。有很多很多配置更改,例如:
- 方向更改(适用于支持纵向和横向的应用)
- Enable/disable暗模式
- Locale/language 变化
- Window 调整大小(适用于分屏和自由格式多 window 环境)
- 字体比例更改或密度比例(“屏幕缩放”)更改
- 以此类推
Is there any workaround other than keeping the values in other variables and set that later?
一般来说,那也行不通。您现有的 activity 正在被销毁并重新创建。当旧 activity 消失时,旧 activity 中的任何字段都会消失。
The documentation 涵盖了配置更改,任何关于 Android 应用程序开发的好书或课程也是如此。您的主要选择是:
使用保存的实例状态 Bundle
或 ViewModel
保存数据,然后您可以在新的 activity 中使用这些数据来恢复您的 UI 配置更改后应处于的任何状态;或
选择退出配置更改并自行处理所有 UI 更新(例如,将所有显示的文本设置为新语言以进行区域设置更改)
前者是基于经典 View
的 UI 开发的典型方法,正如您所做的那样。后者在 Jetpack Compose 中越来越受欢迎,Jetpack Compose 将配置更改作为其现有重组系统的一部分进行处理。
如果我们将辅助功能字体从大变小或从小变大然后返回到应用程序,视图的可见性将不会保留;这意味着如果视图在应用程序中不可见或消失,并且字体大小在辅助功能中更改并返回到应用程序,我们将看到该视图可见。
示例,
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>
现在,点击“点击”按钮,进入设置->辅助功能->字体->更改,然后返回应用程序。隐藏的按钮再次可见。
除了将值保留在其他变量中并稍后设置外,是否有任何解决方法?
Now, click on the "click" button and go to setting->accessibility->font->CHANGE and come back the app. The hidden button is visible again.
您正在进行配置更改。有很多很多配置更改,例如:
- 方向更改(适用于支持纵向和横向的应用)
- Enable/disable暗模式
- Locale/language 变化
- Window 调整大小(适用于分屏和自由格式多 window 环境)
- 字体比例更改或密度比例(“屏幕缩放”)更改
- 以此类推
Is there any workaround other than keeping the values in other variables and set that later?
一般来说,那也行不通。您现有的 activity 正在被销毁并重新创建。当旧 activity 消失时,旧 activity 中的任何字段都会消失。
The documentation 涵盖了配置更改,任何关于 Android 应用程序开发的好书或课程也是如此。您的主要选择是:
使用保存的实例状态
Bundle
或ViewModel
保存数据,然后您可以在新的 activity 中使用这些数据来恢复您的 UI 配置更改后应处于的任何状态;或选择退出配置更改并自行处理所有 UI 更新(例如,将所有显示的文本设置为新语言以进行区域设置更改)
前者是基于经典 View
的 UI 开发的典型方法,正如您所做的那样。后者在 Jetpack Compose 中越来越受欢迎,Jetpack Compose 将配置更改作为其现有重组系统的一部分进行处理。