【问题标题】:Setting header color of app in overview (recent apps) screen在概览(最近的应用程序)屏幕中设置应用程序的标题颜色
【发布时间】:2015-01-20 16:17:44
【问题描述】:

我正在为应用添加一些仅棒棒糖的样式。

我想在此处更改概览屏幕(如 Gmail)中标题的颜色:

我发现我可以做到

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

    <item name="android:colorPrimary">@color/my_favorite_color</item>

</style>

实现它,但我只想为这种情况指定颜色,就像我可以做的那样:

<item name="android:statusBarColor">@color/my_favorite_color<item>

是否有特定的属性来设置标题的颜色?

附带问题:图标和标题也可以更改吗?

【问题讨论】:

  • 这是stackoverflow.com/questions/26899820/…的副本,但由于赏金无法关闭。
  • @alanv 整洁,谢谢艾伦。我会争辩说这是重复的,因为您指出的问题是关于更改标题颜色的,这似乎是不可能的。无论如何,那里的答案完美地回答了我的问题。如果你能回答,我将移除/转移赏金,让你投票结束这个问题。
  • @MaciejGórski 只是一个改进(在我看来):如果您已经知道需要提供什么颜色,则可以覆盖 setTaskDescription(TaskDescription) 并将相关的 TaskDescription 实例传递给超级调用。要从源头追溯,请查看TaskViewHeader。您应该以 Activity#onApplyThemeResource(....) 结尾 - 这是调用 setTaskDescription(TaskDescription) 的地方。
  • @Vikram 感谢您指出onApplyThemeResource。从那里的代码中我们可以清楚地推断出背景不能通过应用程序主题更改,就像statusBarColor 一样,除了使用colorPrimary。我不确定依赖 setTaskDescription 被框架调用会是一件好事。几乎没有尝试通过反射调用ActivityManagerNative.getDefault().setTaskDescription 糟糕(我只是尝试制作不同大小的图标,但它没有用),但我认为我更喜欢更直接的方式来拥有兼容助手类if (SDK_INT &gt;= LOLLIPOP).
  • @Vikram 是的,它在 onCreate 之前只被调用过一次,但是这种行为不是生命周期的一部分,没有记录在案,开发人员首先查看执行此操作的代码将无法无需在被覆盖的方法主体中使用 cmets 来解释其工作原理或深入研究 Android 代码即可理解它。在onCreate 中自己调用它是陈述代码意图的一种直接方式,即使开发人员不知道此方法存在,他们也可以查看 javadoc。我喜欢写更少的代码,但更喜欢我写的代码清晰。

标签: android android-5.0-lollipop material-design android-styles


【解决方案1】:

您可以通过ActivityManager.TaskDescription 更改此设置:

https://developer.android.com/reference/android/app/ActivityManager.TaskDescription.html

从 Activity 上下文中,调用:

TaskDescription taskDescription = new TaskDescription(label, icon, colorPrimary);
((Activity)this).setTaskDescription(taskDescription);

【讨论】:

  • 澄清更多: * 标签 - 卡片标题上的文本 * 图标 - 左位图图标(通常是在“colorPrimary”颜色上看起来不错的图标 * colorPrimary - 卡片标题颜色(通常与工具栏颜色,但不一定)这个解决方案对我有用,+1 :)
  • 效果很好。取决于minSdkVersion,可能需要包裹在if (android.os.Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.LOLLIPOP) { ... }
  • 工作得很好,一旦你发现它在onCreate() 中不起作用。将此代码放在onResume() 中即可。
  • sdk 19 有可能这样做吗?
  • 太棒了,在我的情况下,我必须把它放在 onStart() 方法中才能让它工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多