介绍
今天就跟大家聊聊有关如何在Android中设置的主题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
<强>原因一强>
错误写法:
& lt; style name=癆ppTheme.NoActionBar"比; & lt;才能item name=癮ndroid: windowActionBar"祝辞false & lt;才能item name=癮ndroid: windowNoTitle"祝辞true & lt;才能item name=癮ndroid: windowDrawsSystemBarBackgrounds"祝辞true & lt;才能item name=癮ndroid: statusBarColor"祝辞@android:颜色/transparent ,& lt;/style>
其中AppTheme使用的主题是AppCompat的主题,由于AppCompat主题下的windowActionBar和windowNoTitle的命名方式前都没有android字样,所以报错。
<强>正确写法:强>
& lt; style name=癆ppTheme.NoActionBar"比; & lt;才能item name=皐indowActionBar"祝辞false & lt;才能item name=皐indowNoTitle"祝辞true & lt;才能item name=癮ndroid: windowDrawsSystemBarBackgrounds"祝辞true & lt;才能item name=癮ndroid: statusBarColor"祝辞@android:颜色/transparent ,& lt;/style>
<强>原因二强>
如果主题设置成有Actionbar的主题并且没有配:
& lt; item name=皐indowActionBar"祝辞false & lt; item name=皐indowNoTitle"祝辞true
也会出这样的错误。
<强>看下源码:强>
在我们设置工具栏时候:<代码> ((AppCompatActivity) getActivity ()) .setSupportActionBar(工具栏);代码>点进源码可以看到源码调用逻辑是:
public void setSupportActionBar (@Nullable Toolbar 工具栏),{ getDelegate才能().setSupportActionBar(工具栏); 以前,}>在往下追一步,出真相了:
public void setSupportActionBar (Toolbar 工具栏),{ if 才能;(! (mOriginalWindowCallback instanceof 活动)),{ ,,//,Only Activities support custom Action 酒吧 ,才能回报; ,,}//这才能里会去判有没有actionbar存在,如果有直接抛异常 final 才能ActionBar ab =, getSupportActionBar (); if 才能;(ab instanceof  WindowDecorActionBar), { ,,throw new  IllegalStateException(“却;能够Activity already has an action bar supplied “, + ,,,,“by 从而window 装饰只Do not request Window.FEATURE_SUPPORT_ACTION_BAR 以及set “+ ,,,,“windowActionBar 用false 拷贝your theme 用use a Toolbar 相反!”); ,,}//才能,If reach 我方表示歉意here then 我们# 39;re setting a new action 酒吧//才能,First clear out 从而MenuInflater 用make sure that it is valid for 从而new Action 酒吧 时间=mMenuInflater 才能;零;//才能,If have 我方表示歉意an action bar 目前,destroy 它 if 才能;(ab !=, null), { ,,ab.onDestroy (); ,,} if 才能;(toolbar !=, null), { ,,final ToolbarActionBar  tbab =, new ToolbarActionBar(工具栏, ,,,,((活动),mContext) .getTitle (),, mAppCompatWindowCallback); ,,mActionBar =, tbab; ,,mWindow.setCallback (tbab.getWrappedWindowCallback ()); ,,},{else ,,mActionBar =,空; ,,//,Re-set 从而original window callback since may 我方表示歉意have already set a Toolbar 包装 ,,mWindow.setCallback (mAppCompatWindowCallback); ,,} invalidateOptionsMenu才能(); 以前,}>主要在这里:
//这里会去判有没有actionbar存在,如果有直接抛异常 时间=final ActionBar  ab getSupportActionBar (); if 才能;(ab instanceof  WindowDecorActionBar), { ,,throw new  IllegalStateException(“却;能够Activity already has an action bar supplied “, + ,,,,“by 从而window 装饰只Do not request Window.FEATURE_SUPPORT_ACTION_BAR 以及set “+ ,,,,“windowActionBar 用false 拷贝your theme 用use a Toolbar 相反!”); null如何在Android中设置的主题