【问题标题】:How to change Android App theme at runtime like Google Inbox App?如何在运行时更改 Android App 主题,如 Google Inbox App?
【发布时间】:2018-02-23 12:30:59
【问题描述】:

收件箱应用具有导航抽屉。单击任何导航抽屉项目时,会加载一个片段(很可能),并且在此事务期间,应用程序主题会发生变化。更改应用程序主题需要在活动的 onCreate() 方法中的 setContentView(..) 之前调用 setTheme() 方法。超级流畅的 UI 指示片段的使用,那么如何在不重新创建父活动的情况下实现这一点(否则肯定会有延迟)。

The snooze fragment hase oragne like theme

The inbox fragment has blue like them

【问题讨论】:

  • 请先说明您的问题
  • 你现在明白我的问题了吗?
  • 是的,这可以很容易地使用stackoverflow.com/a/2483001/5928383 实现,唯一的技巧是,它适用于活动。因为你有片段的方式是添加一个restartActivity方法,片段更改保持当前片段的记录。否则使用活动来实现它。

标签: android user-interface android-fragments navigation-drawer google-inbox


【解决方案1】:

您实际上可以更改主题的样式,但只能在调用setContentView(@ResId int) 方法之前。大概是这样的吧?

getTheme().applyStyle(isDashUser ? R.style.redStatusBar : R.style.blackStatusBar, true);
setContentView(R.layout.my_activity);

【讨论】:

  • 这需要调用 Activity 的 onCreate() 方法,这意味着在使用片段时(如在抽屉式导航中),需要重新创建父 Activity,但 Inbox 应用程序不会这样做肯定会有一些滞后
【解决方案2】:

如果您在更改页面时仔细观察,两种颜色之间会有轻微的渐变。这可能表明他们有一个独立于主题的系统来重新着色所有 UI 元素。

我的一个应用程序具有非常相似的颜色更改功能,我只是设置了一些方法来手动将相关颜色重新应用于每个 UI 元素。当然,谷歌可能有一些超级巧妙的方法,他们永远不会与任何人分享。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多