【发布时间】:2021-02-22 19:37:29
【问题描述】:
我在将主题设置为 PreferenceFragmentCompat 以尝试实现此目的时遇到了一些麻烦:
我设置了以下样式:
<style name="AppThemeBase" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowLightStatusBar">true</item>
<item name="android:statusBarColor">@color/status_bar</item>
<item name="colorControlNormal">@color/colorPrimary</item>
<item name="preferenceTheme">@style/AppThemeBase.RecordingPreferencesTheme</item>
</style>
<style name="AppThemeBase.RecordingPreferencesTheme" parent="@style/PreferenceThemeOverlay">
<item name="android:textColorPrimary">#FD0000</item>
<item name="android:textColorSecondary">#1F6F2B</item>
</style>
使用此选项,我可以在 Android Studio 布局预览中看到我想要实现的目标,但是当我执行它时它没有效果
我执行时的结果:
到目前为止,它唯一有效的方法是使用 <item name="android:textColor">#FD0000</item> 来更改标题颜色,但我找不到更改摘要颜色的方法。
我的另一个问题是,是否有一种方法可以仅为该首选项片段设置主题,而不是在所有首选项片段中使用它。在片段布局的根部使用android:theme 对我不起作用:(
更新:
根据@Susan 的问题,这是我尝试在片段布局的根部使用android:theme 的方式,我在主布局的基础上创建了这个主题
<style name="RecordingPreferenceTheme" parent="AppThemeBase">
<item name="preferenceTheme">@style/AppThemeBase.RecordingPreferencesTheme</item>
</style>
这是首选项布局,其中我有一个片段会膨胀PreferenceFragmentCompat
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:theme="@style/RecordingPreferenceTheme">
<include
android:id="@+id/include"
layout="@layout/toolbar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<fragment
android:id="@+id/fragment_container_settings"
android:name="com.example.app.RecordSettingsFragment$RecordPreferences"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/include" />
</androidx.constraintlayout.widget.ConstraintLayout>
并且在布局的根部我会设置android:theme="@style/RecordingPreferenceTheme",但它不起作用,只是在Activity中设置的主主题的变化会有一些效果。我已经尝试过customize PreferenceFragmentCompat layout,结果相同。
干杯!!
【问题讨论】:
-
你能分享一下你是如何在片段的根目录中应用
android:theme的吗? -
@SusanThapa 我已经更新了问题
-
不可能仅仅为了偏好而改变颜色,如果你想这样做,你必须从像
Preference这样的特定类扩展,并且还必须复制它的布局xml 到您的应用程序以具有这些硬编码值
标签: android android-fragments android-theme preferencefragmentcompat