我正在使用androidx.preference:preference:1.2.0
中的SwitchPreferenceCompat
。在Android Studio预览版中,一切看起来都很好:
但在真实的设备中,它看起来是这样的:
这里是我的preferences.xml
:
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory app:title="@string/auth_header">
<SwitchPreferenceCompat
app:key="@string/auth_key"
app:title="@string/auth_title"
android:icon="@drawable/ic_fingerprint"/>
</PreferenceCategory>
</PreferenceScreen>
和应用主题:
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.Notes" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/color_primary</item>
<item name="colorPrimaryVariant">@color/color_primary_variant</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/color_secondary</item>
<item name="colorSecondaryVariant">@color/color_secondary_variant</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor">@android:color/transparent</item>
<!-- Customize your theme here. -->
<item name="android:windowLightStatusBar">true</item>
<item name="windowActionModeOverlay">true</item>
<item name="colorAccent">@color/black</item>
</style>
</resources>
注意colorAccent
与这个问题无关,没有它结果是一样的(即使你从主题中删除所有值,结果也不会改变),我只是用它来设置首选项标题颜色。
问题:这是库错误还是我做错了什么?
设备:POCO X3 NFC(MIUI 12.5,安卓11)。androidx.preference:preference:1.2.0
com.google.android.material:material:1.8.0
1条答案
按热度按时间idv4meu81#
这可能是与
Material3
主题相关的SwitchCompat
小部件的错误。我在此打开问题:
https://issuetracker.google.com/issues/271871302
https://github.com/material-components/material-components-android/issues/3295
我最终使用了自己的设置实现(常规片段+
MaterialSwitch
布局),因为实现自己的解决方案比处理这些bug更容易、更快。它还增加了更多的定制,但现在我必须手动更新设置(我使用常规的
ViewModel
来保持状态,使用我自己的PreferencesRepository
来保存/加载首选项)。