跳到主要內容

ADT 開新專案不使用 support.v7.appcompat

        ADT 愈來愈煩了…不知道從哪一版開始,我目前版本是 Android SDK Tools 22.6.4,Android SDK Platform-Tools 19.0.2,只要開新專案選 Blank Activity,預設 MainActivity 就會 extends AtionBarActivity 並使用 Fragment 顯示頁面,而且 project list 還會多一個 appcompat_v7,可是我一點都不喜歡 Fragment 阿!!!但是選專案 Activity 時,多了一個 Empty Activity,我選它總可以了吧!


        很好,總算是 extends Activity了,但還是一樣會多一個 appcompat_v7 的專案。這看了真的很礙眼,我索性就把它刪了。結果刪掉後,反而新專案怎麼 build 都失敗。看一下錯誤都是在 style.xml



        看一下錯誤訊息,是 No resource found that matches the given name 'Theme.AppCompat.Light'。因為這是在 support v7 appcompat 裡的東西,把它砍了當然就找不到,build 失敗也是正常的,這裡教大家如何能順利 build 這個新專案:

1. 對專案按右鍵 --> Properties --> 左邊 Panel 選 Android --> 右邊 Scroll bar 拉到最下面 -->             Library 的地方把 appcompat_v7 這個 project library 給 remove 掉 --> Apply and OK。

2. 把 style.xml 裡的 parent theme 都改成原有的 theme,例如 android:Theme.Light

3. 重新 build project --> 打完收工!

        這是不想用 Fragment 的情形才要這樣做啦,要是你的 app 想要呈現多頁的資訊的話,Fragment + ActionBar/ViewPager 還是不錯的選擇啦!(但是滿難用就是了)



留言

這個網誌中的熱門文章

如何把 Status Bar 變透明

        Android 從 4.4 (KitKat, api level 19) 後才支援這個功能, 到了 5.0 (Lollipop, api level 21) 自訂性更高, 可以讓我們設定各種顏色, 當然也包含透明色。以下分別介紹如何使用這兩種版本的方法。         方法1: 利用 attribute " android:windowTranslucentStatus ", 在 style.xml 加上這個 attribute 就好。要注意的是 Android 版本要在 4.4 以上才可以用這個 attribute: <resources> <!-- Base application theme for API 19+. This theme completely replaces AppTheme from res/values/styles.xml on API 19+ devices. --> <style name="AppTheme" parent="@style/AppBaseTheme"> <!-- API 19 theme customizations can go here. --> <item name="android:windowTranslucentStatus">true</item> </style> </resources>         下面的圖分別為 4.4 跟 5.0 的手機使用這個 attribute 的結果:         因為設定了這個 attribute, 畫面會從 status bar 下方開始畫。要解決這個有兩種方法, 第一個是在 layout 畫面設定 attribute "android:fitsSystemWindows " <RelativeLayout xmlns:android="http://schemas.android.com/apk/res

透明背景的 AlertDialog

        Android dialog 預設都會有一個背景底色,要怎麼把它去掉呢?其實直接改 AlertDialog 的 style 就可以了,但我改好久…以下的範例是使用了 Support v7 AppCompat 的 theme,其他 theme 我不知道可不可以,有興趣的人可以試試看。 <style name="TransparentDialog" parent="@style/Base.Theme.AppCompat.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowIsFloating">true</item> <item name="android:windowTitleStyle">@null</item> <item name="android:background">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> <item name="android:alertDialogStyle">@style/TransparentDialog.Color</item> </style> <style name="TransparentDialog.Color" parent="@style/Base.Theme.AppCompat.Dialog"> <item name="androi

Deprecated API

        當透過 IDE 使用 API,或是查 Document 時,常會看到一段途述:  This method was deprecated… 這是什麼意思呢?這是告訴我們還是可以使用此 method,但未來可能會沒有用、甚至是 在新版本的 SDK 會把這個 method 移掉 。         以 API level 11 出現的 Fragment  為例子,在使用時常會 override 一個 callback 叫 onAttach (Activity activity),但到了 API level 23 (Lollipop) 時,可以發現 onAttach (Activity activity) 被標記為 deprecated 了,取而代之的是 onAttach (Context context)。         像我個人寫程式不太喜歡出現 warning,而使用到 deprecated api 會被 Android Studio 檢查出來,我在用 Fragment 時就直接都換成 onAttach (Context context),結果程式在 api level 較低的手機就出現不符合預期的行為。Debug 了一陣子才發現 onAttach (Context context) 是新的 API,舊版本 SDK 當然沒有這個  API,自然就不會執行到該 API。         因此,雖然有些 API 被標記為 deprecated,但當你的程式還需要支援較舊版本時,還是得使用這些 API,假如要用的 API 在 Support Library  也有對應版本的話,我會建議用 Support Library 版本,因為放在裡面的 API 本來就是為了向下相容而設計的。以 Support Libaray 裡的Fragment 來說,onAttach (Activity activity) 一樣被標記為 deprecated,也一樣有 onAttach (Context context)  ,但它卻向下相容到 api level 4,因此為了向下相容性,使用 Support Library 是比較好的。 參考資料 1. Android Fragment 2. Android Support v4 Fragment 3. An