Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 細數android 自定義activity的title 中的坑(自定義title整個過程)

細數android 自定義activity的title 中的坑(自定義title整個過程)

編輯:關於Android編程

會使用搜索引擎的童鞋都知道搜一下怎麼實現   然後出來一大堆相同的結果,就是下面這一段代碼   [java]   requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);       setContentView(view);       getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);     他們給你什麼答案了麼?沒有,別用國內搜索引擎了,博客都TM是轉載的,那些SB博主們,趕緊滾粗 下面我就給你們論論這之中會有哪些坑:   1.   [java]  requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);    這句話必須放在setConentView之前,大家都知道,因此這句話就像在AndroidManifest.xml中進行配置一樣,設置了之後你就不能設置requestWindowFeature(Window.FEATURE_NO_TITLE),因為他們之間是互斥的。   2.   能夠自定義標題欄,但是怎麼更改自己放進去布局裡面的內容呢?   這個實際上很簡答, 只要findViewById(R.layout.title中的某個View的id)就能獲取到控件了,拿它來做相應的操作就行了     3.   你要動態隱藏和顯示標題欄怎麼辦呢?   你會搜到好多這樣的結果:   ((ViewGroup)getWindow().   findViewById(com.android.internal.R.id.title_container)).setVisibility(View.GONE); 出於好心,我告訴你,這個方法是獲取不到這個layout的,因為,com.android.internal.R.id.title_container是受限的,所以你獲取到的是null 所以說,要獲取到正確的title_container的話,就只能用反射了,代碼如下   [java]   public static Object reflactFiled(String className, String filedName){           Object result = null;           try {               result = Class.forName(className).getField(filedName).get(null);           } catch (IllegalArgumentException e) {               e.printStackTrace();           } catch (SecurityException e) {               e.printStackTrace();           } catch (IllegalAccessException e) {               e.printStackTrace();           } catch (NoSuchFieldException e) {               e.printStackTrace();           } catch (ClassNotFoundException e) {               e.printStackTrace();           }           return result;       }   調用這個函數來獲取titleContainer的id吧,然後你就知道怎麼獲取到這個ViewGroup了 [java]   protected int getTitleContainerId(){           Object obj = Utils.reflactFiled("com.android.internal.R$id", "title_container");           if(obj != null){               return (Integer) obj;           }           else{               return -1;           }       }     4. 前面我只是說這個titleContainer是ViewGroup,但是,具體一點,它是一個FrameLayout   並且   [java]   getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);   是將R.layout.title這個布局inflate之後add到titleContainer中去的 因此,沒有特殊情況不要多次調用上面這個函數,不然就會出現titleContainer裡面出現兩個children的情況,但是你操縱的永遠是底層那個,使你得不到你想要的界面那效果了   通過上面4個坑的分析,若是你已經明白了我想表達的意思,我想你已經明白了如何在你的項目中使用title_container了
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved