使用值文件夹为不同的 API 版本设置不同的资源值

tec*_*man 5 android kotlin android-resources

我注意到 Android 6 上出现崩溃,并显示错误消息 - “A/OpenGLRenderer:错误:环境顶点缓冲区溢出!!!” 将清单文件中的活动的硬件加速设置为 false 可以解决问题,但会影响应用程序的性能(导致应用程序速度变慢)。

我想仅当 android 版本为 23 (android M) 时才将该值设置为 false,否则不设置。我是这样处理的:

安卓清单文件:

<activity
android:name=".MainActivity"
android:hardwareAccelerated="@bool/hardwareAcceleratedValue">
Run Code Online (Sandbox Code Playgroud)

资源/值/bool.xml

<resources>
    <bool name="hardwareAcceleratedValue">true</bool>
</resources>
Run Code Online (Sandbox Code Playgroud)

res/values-v23/bool.xml

<resources>
    <bool name="hardwareAcceleratedValue">false</bool>
</resources>
Run Code Online (Sandbox Code Playgroud)

有了这个,我注意到 Android M 设备上的性能较慢(这是预期的),而且在 Android 9 的设备上也是如此。因此,我继续为 android 9 创建另一个文件夹,并将文件添加到其中,并将“hardwareAcceleratedValue”设置为 true 和性能更快。

问题-

对于 v23 以外的 android API,android 不应该从 res/values/bool.xml 读取“hardwareAcceleratedValue”值吗?或者我是否必须为每个 android API 创建单独的文件夹,并在其中创建 bool.xml 文件,即 res/values-v28/bool.xml 或 res/values-v27/bool.xml?

如何仅将“hardwareAcceleratedValue”设置为 false(仅适用于 Android-M 或更低版本),而适用于 android-M 以外的所有版本?

Com*_*are 10

对于 v23 以外的 android API,android 不应该从 res/values/bool.xml 读取“hardwareAcceleratedValue”值吗?

-v23用于 API 级别 23及更高级别

如何仅将“hardwareAcceleratedValue”设置为 false(仅适用于 Android-M 或更低版本),而适用于 android-M 以外的所有版本?

falseres/values/bool.xmltrueres/values-v22/bool.xml。Android M 的 API 级别为 21,因此-v22将用于所有更高版本。

如果“android-M”指的是 Android 5.x,则包含falseinres/values/bool.xmltruein res/values-v23/bool.xml,因为 Android 5.1 的 API 级别为 22。