如何在Android中设置的主题

  介绍

今天就跟大家聊聊有关如何在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中设置的主题