为特定视图应用新主题,而无需重新创建活动

时间:2019-04-10 00:30:38

标签: android android-theme

我的应用程序一次显示6个片段,因此重新创建活动不是一个好选择,因为它会使屏幕闪烁并面临一些意外问题,从而无法重新保存活动和片段的状态并保存它们。

我也不想遍历视图层次结构并更改每个视图,因为有许多属性需要更改。

我所需要做的只是为NavigationView应用一个新的主题(样式),该主题(样式)隐藏在屏幕的旁边,稍后将显示。特别是,我想更改以下属性:

itemBackgrounditemIconTintitemTextColor

1 个答案:

答案 0 :(得分:0)

感谢Mike M

我用他的方式解决了这个问题:

public void updateNavigationViewLayout(){
    drawerLayout.removeView(navigationView);
    LayoutInflater inflater = LayoutInflater.from(new ContextThemeWrapper(this, R.style.newtheme));
    drawerLayout = (DrawerLayout) inflater.inflate(R.layout.navigation_drawer, drawerLayout);
    navigationView = drawerLayout.findViewById(R.id.nav_view);
}

请记住将navigationView引用到新的。否则,第二次调用此方法时,将不会删除新的NagivationView,并且您将添加一个额外的NavigationView导致此错误:

Child drawer has absolute gravity LEFT but this DrawerLayout already has a drawer view along that edge