激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Android設置theme中可能遇到的坑

Android設置theme中可能遇到的坑

2022-03-03 14:58stone_zhu Android

Theme是一套UI控件和Activity的樣式,下面這篇文章主要給大家介紹了關于Android設置theme中可能遇到的坑的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧

發現坑

最近在配置項目主題的時候報了如下錯誤:

This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR

原因一

錯誤寫法:

?
1
2
3
4
5
6
<style name="AppTheme.NoActionBar">
  <item name="android:windowActionBar">false</item>
  <item name="android:windowNoTitle">true</item>
  <item name="android:windowDrawsSystemBarBackgrounds">true</item>
  <item name="android:statusBarColor">@android:color/transparent</item>
 </style>

其中AppTheme使用的主題是AppCompat的主題,由于AppCompat主題下的windowActionBar和windowNoTitle的命名方式前都沒有android字樣,所以報錯。

正確寫法:

?
1
2
3
4
5
6
<style name="AppTheme.NoActionBar">
  <item name="windowActionBar">false</item>
  <item name="windowNoTitle">true</item>
  <item name="android:windowDrawsSystemBarBackgrounds">true</item>
  <item name="android:statusBarColor">@android:color/transparent</item>
 </style>

原因二

如果主題設置成有Actionbar的Theme并且沒有配:

?
1
2
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

也會出這樣的錯誤。

看下源碼:

在我們設置toolbar時候: ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);點進源碼可以看到源碼調用邏輯是:

?
1
2
3
public void setSupportActionBar(@Nullable Toolbar toolbar) {
  getDelegate().setSupportActionBar(toolbar);
 }

在往下追一步,出真相了:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public void setSupportActionBar(Toolbar toolbar) {
  if (!(mOriginalWindowCallback instanceof Activity)) {
   // Only Activities support custom Action Bars
   return;
  }
  //這里會去判有沒有actionbar存在,如果有直接拋異常
  final ActionBar ab = getSupportActionBar();
  if (ab instanceof WindowDecorActionBar) {
   throw new IllegalStateException("This Activity already has an action bar supplied " +
     "by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set " +
     "windowActionBar to false in your theme to use a Toolbar instead.");
  }
 
  // If we reach here then we're setting a new action bar
  // First clear out the MenuInflater to make sure that it is valid for the new Action Bar
  mMenuInflater = null;
 
  // If we have an action bar currently, destroy it
  if (ab != null) {
   ab.onDestroy();
  }
 
  if (toolbar != null) {
   final ToolbarActionBar tbab = new ToolbarActionBar(toolbar,
     ((Activity) mContext).getTitle(), mAppCompatWindowCallback);
   mActionBar = tbab;
   mWindow.setCallback(tbab.getWrappedWindowCallback());
  } else {
   mActionBar = null;
   // Re-set the original window callback since we may have already set a Toolbar wrapper
   mWindow.setCallback(mAppCompatWindowCallback);
  }
  invalidateOptionsMenu();
 }

主要在這里:

?
1
2
3
4
5
6
7
//這里會去判有沒有actionbar存在,如果有直接拋異常
final ActionBar ab = getSupportActionBar();
  if (ab instanceof WindowDecorActionBar) {
   throw new IllegalStateException("This Activity already has an action bar supplied " +
     "by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set " +
     "windowActionBar to false in your theme to use a Toolbar instead.");
  }

好了,結束。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://www.jianshu.com/p/f77ef2c90417

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: av色偷偷| 日本一区二区不卡在线观看 | 欧美国产一区二区三区 | 亚洲影院在线播放 | 91国在线高清视频 | 国产精品久久久久永久免费观看 | 亚洲自拍第一 | 成人欧美日韩一区二区三区 | 色av综合在线| 圆产精品久久久久久久久久久 | 国产一区二区三区视频在线观看 | 国产一区二精品区在线 | 精品亚洲夜色av98在线观看 | 久久99国产伦子精品免费 | av在线免费电影 | 久久精品国产99国产精品澳门 | 国产69精品久久久久9999不卡免费 | 国产女厕所 | 欧产日产国产精品乱噜噜 | 成人男女啪啪免费观看网站四虎 | 毛片成人网 | 亚洲成人精品在线 | 国产成人精品二区 | 国产在线看一区 | 国产亚洲精品综合一区91 | 久久手机在线视频 | 黄色av.com| 色女孩网 | 蜜桃视频在线免费观看 | 成人亚洲 | 欧美日韩在线视频一区 | 久久精品欧美一区二区 | 一区二区精品视频在线观看 | 天天草天天干天天射 | 日本成人一二三区 | 免费国产在线观看 | 成人毛片久久 | 国产精品中文在线 | 成年人免费视频播放 | av电影在线免费 | 九九热精品免费视频 |