我的应用程序一次显示6个片段,因此重新创建活动不是一个好选择,因为它会使屏幕闪烁并面临一些意外问题,从而无法重新保存活动和片段的状态并保存它们。
我也不想遍历视图层次结构并更改每个视图,因为有许多属性需要更改。
我所需要做的只是为NavigationView
应用一个新的主题(样式),该主题(样式)隐藏在屏幕的旁边,稍后将显示。特别是,我想更改以下属性:
itemBackground
,itemIconTint
,itemTextColor
答案 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