- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚从支持库迁移到 AndroidX。我的大部分代码工作正常,但突然我的自定义首选项主题停止工作。
我的应用程序大多具有深色背景,因此我将文本颜色设置为白色变体,但在我的设置中,背景颜色为浅色,因此首选项的标题和副标题应为深色变体。在我尝试自定义我的偏好 fragment 时,我使用了这个解决方案 -> How to style PreferenceFragmentCompat可悲的是,在从支持库迁移到 AndroidX 后,该解决方案停止工作。
这些是我迁移后的实际依赖项:
implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'
implementation 'com.google.android.material:material:1.1.0-alpha02'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3'
implementation 'androidx.preference:preference:1.1.0-alpha02'
implementation 'androidx.recyclerview:recyclerview:1.1.0-alpha01'
implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- General theme colors -->
<item name="colorPrimary">@color/appColorPrimary</item>
<item name="colorPrimaryDark">@color/appColorPrimaryDark</item>
<item name="colorAccent">@color/appColorAccent</item>
<!-- Text Appearance styles -->
<item name="android:textViewStyle">@style/TextViewStyle.Serif</item>
<item name="android:textColorPrimary">@color/textColorPrimary</item>
<item name="android:textColorSecondary">@color/textColorSecondary</item>
<item name="android:textColorTertiary">@color/textColorTertiary</item>
<item name="android:textColorLinkInverse">@color/textColorLinkInverse</item>
<!--For the SearchView cursor color-->
<item name="colorControlActivated">@color/white</item>
<!--Custom styles and themes -->
<item name="preferenceTheme">@style/AppTheme.PreferenceTheme</item>
<item name="actionOverflowMenuStyle">@style/AppTheme.OverflowMenu</item>
<item name="alertDialogTheme">@style/AlertDialogStyle</item>
<!-- Custom attributes defined in attrs.xml -->
<item name="dividerColor">@color/dividerColor</item>
</style>
<!--Preference screen theme-->
<style name="AppTheme.PreferenceTheme" parent="PreferenceThemeOverlay.v14.Material">
<!--Overriding textColor primary/secondary from main theme-->
<item name="android:textColorPrimary">@color/textColorPrimaryInverse</item>
<item name="android:textColorSecondary">@color/textColorSecondaryInverse</item>
<item name="android:colorControlActivated">@color/appColorPrimary</item>
</style>
最佳答案
我在此处添加此内容,以便将来可能对某人有所帮助
如果您从 Support Library 迁移到 AndroidX,那么如果您使用 Preference 库的第一个版本,一切都应该是一样的。例如:
implementation 'androidx.preference:preference:1.0.0'
如果您尝试更新到最新版本,您可能会遇到这样的问题。我正在调查这个问题,我找到了原因。
PreferenceFragmentCompat
的最新版本中,我们可以找到这段代码:
// Source code of version 1.1.1
public abstract class PreferenceFragmentCompat extends Fragment implements
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
...
getActivity().getTheme().applyStyle(theme, false);
}
}
如我们所见,
applyStyle
的第二个参数是
false
.检查该方法的javadoc,我们可以看到:
* @param resId The resource ID of a style resource from which to
* obtain attribute values.
* @param force If true, values in the style resource will always be
* used in the theme; otherwise, they will only be used
* if not already defined in the theme.
*/
public void applyStyle(int resId, boolean force)
因此,
AppTheme.PreferenceTheme
中定义的属性只有在
AppTheme
早期未定义它们时才会生效本身。在上面的代码中,我们可以看到两个主题中都定义了一些属性。因此,它们不会在 Preference 屏幕中生效,因为
AppTheme
将被优先考虑。
1.0.0
,主题以不同的方式应用:
// Source code of version 1.0.0
public abstract class PreferenceFragmentCompat extends Fragment implements
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
...
mStyledContext = new ContextThemeWrapper(getActivity(), theme);
mPreferenceManager = new PreferenceManager(mStyledContext);
}
}
因此,换句话说:如果您从支持库迁移并且您的偏好屏幕主题损坏,请尽量避免使用最新版本并使用版本
1.0.0
, 例如。
implementation 'androidx.preference:preference:1.1.0-alpha02'
这个问题阻止我迁移到最新版本,因为我不想为了更新设置屏幕而重新设计整个应用程序的主题。
关于android - 如何在新的 AndroidX 库中自定义首选项屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54099284/
我回到我的 Android 项目来完成它的工作,突然我收到此错误消息 “无法解析 androidxAffected 模块:app” “错误:无法解析:androidx。受影响的模块:应用程序” 这是我
我今天尝试使用 Android Studio 中的“重构 -> 迁移到 AndroidX”选项将我当前的项目迁移到 AndroidX,每当我尝试编译我的应用程序时,我都会收到一个 Program ty
当我尝试构建应用程序时,它在构建选项卡上给了我这个错误 More than one file was found with OS independent path 'META-INF/androidx
我在尝试构建 Android 应用程序时遇到以下问题。我遇到了一些关于强制或使用手动依赖项解决策略的 android 帖子。这似乎并没有解决问题。 有人问过类似的问题:Similar stack ov
我刚刚通过 Android Studio 菜单选项 Refactor -> Refactor to AndroidX 迁移到 androidx 我收到以下错误: android.view.Inflat
我用 kotlin 开始新的 android 应用程序项目。我的 sdk gradle 配置是 compileSdkVersion 29 和 buildToolsVersion "29.0.1" 我试
我迁移到 AndroidX,然后如果我尝试使用 API 29 将项目运行到模拟器中,我会收到错误。 API 28 及之前的模拟器/真实设备没有问题。 java.lang.RuntimeExceptio
我正在开发 Android MVVM 应用程序。我只是手动切换到 androidx 库。这是我的 build.gradle 中的库: implementation 'com.google.code.g
在迁移到 AndroidX 并将所有 AndriodX 包更新到最新版本后,构建将失败,在 obj 中的构建生成的 XML 文件中显示三个类似的错误文件夹: \obj\Debug\100\lp\117
从 更新导航组合依赖后2.4.0-alpha03 至 2.4.0-alpha05 在尝试在可组合屏幕之间导航(例如从 taskComposable 导航到 listComposable 屏幕)后,我遇
我刚刚通过 Android Studio 菜单选项 重构 -> 重构到 AndroidX 迁移到 androidx 我收到以下错误: android.view.InflateException: Bi
我创建了一个 Android 应用程序,并从 Gallery 添加了“Navigation Drawer Activity”,我删除并重命名了菜单项。当我单击抽屉 Activity 中的任何菜单项启动
我正在制作一个项目,但是当我编译我的项目并在 Android Studio 上启动应用程序时,我的应用程序崩溃了。 在我的 Logcat 错误中 Process: com.passionategeek
完整的堆栈仅包括 android 核心代码: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean and
将项目迁移到 AndroidX 后出现以下错误:程序类型已经存在androidx.concurrent.futures.DirectExecutor 我的应用Gradle如下: configu
我想在 Play 商店中更新应用程序的版本,但在测试中我开始收到此错误。 Superclass androidx.core.app.f of androidx.activity.ComponentAc
AndoirdX 升级后出现错误。 android.databinding.tool.util.LoggedErrorException: failure, see logs for details.
将项目迁移到 AndroidX 后我遇到了这个崩溃 Unable to start activity ComponentInfo{oackagename/com.paymob.acceptsdk.P
我的导航 Controller 中有此错误,我已经更改了 XML 中的声明,但没有帮助,我更改了 Fragment 为 FragmenContainer,但没有帮助。谁能帮我解决这个错误? 日志: E
我创建了一个水平回收器 View ,其中加载了项目。之后,我需要选择该项目并执行点击事件。到这个存档(代码在下面可用),现在我想改变点击项目的颜色,剩下的项目应该被取消选择。如果我没有正确查询,请道歉
我是一名优秀的程序员,十分优秀!