使用PreferenceFragmentCompat后无法加载android.widget.Toolbar问题排查
android.widget.Toolbar加载失败问题:PreferenceFragmentCompat引发的RtlSpacingHelper空指针异常
问题背景
原本可正常加载android.widget.Toolbar的FragmentActivity,在首次部署androidx.preference.PreferenceFragmentCompat后,无法再加载该Toolbar。堆栈追踪显示失败根源为android.widget.RtlSpacingHelper实例为空引发空指针异常。
错误堆栈日志
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RtlSpacingHelper.setDirectionResolved(int)' on a null object reference at android.widget.Toolbar.onRtlPropertiesChanged(Toolbar.java:1432) at android.view.View.resolveRtlPropertiesIfNeeded(View.java:25804) at android.view.View.measure(View.java:25975) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:25978) ...
相关代码片段
Toolbar布局代码
<android.widget.Toolbar android:id="@+id/main_toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
可复现问题的极简Fragment代码
public class SettingsFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.app_preferences, rootKey); } }
示例偏好设置XML代码
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="通用设置"> <SwitchPreferenceCompat android:key="enable_notification" android:title="开启通知提醒" android:summary="收到新消息时推送通知" /> </PreferenceCategory> </PreferenceScreen>
已知信息
androidx.appcompat.widget.Toolbar仍可正常加载,无此异常- Android API 33的SDK中
android.jar不包含RtlSpacingHelper类,但Android平台源码中存在该类
疑问
PreferenceFragmentCompat部署后,会从哪些层面影响Activity的后续行为,导致原生Toolbar加载失败?- 针对该问题,是否有可行的规避或修复方案?
内容的提问来源于stack exchange,提问作者Bad Loser
相关产品推荐
相关产品推荐

