Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android4.0設置界面修改總結(二)

Android4.0設置界面修改總結(二)

編輯:關於Android編程

今年1月份的時候,有和大家分享給予Android4.0+系統設置的修改:Android4.0設置界面修改總結

時隔半年,回頭看看那個時候的修改,其實是有很多問題的,比如說:

①.圓角Item會影響到第三方應用(因為我是公共修改的framework下的PreferenceGroupAdapter嘛)。

②.設置不能橫豎屏切換。

由於當時客戶催的比較急,沒有顧及到,不過後來,我們在做新平台的時候,是有重新完善的,今天就和大家分享一下。


第一個問題的解決:

①.在PreferenceGroupAdapter中加一個boolean變量mIsRoundCornerPreference,如果為true時返回圓角處理過的view,為false時則返回原來的view。代碼如下:

        // start by liweiping 20140523            
        View view = preference.getView(convertView, parent);
        if (!mIsRoundCornerPreference) {
            return view;
        } else {
            if (mPreferenceListBackgroundIndex.get(position) == SINGLE_LINE_ROUND_CORNER_BACKGROUND) {
                view.setBackgroundResource(com.android.internal.R.drawable.easy_pref_item_single);
            } else if (mPreferenceListBackgroundIndex.get(position) == TOP_ROUND_CORNER_BACKGROUND) {
                view.setBackgroundResource(com.android.internal.R.drawable.easy_pref_item_top);
            } else if (mPreferenceListBackgroundIndex.get(position) == CENTER_RECTANGLE_BACKGROUND) {
                view.setBackgroundResource(com.android.internal.R.drawable.easy_pref_item_center);
            } else if (mPreferenceListBackgroundIndex.get(position) == BOTTOM_ROUND_CORNER_BACKGROUND) {
                view.setBackgroundResource(com.android.internal.R.drawable.easy_pref_item_bottom);
            }
            return view;
        }
        //end by liweiping 20140523

②.mIsRoundCornerPreference這個變量是通過讀取attrs.xml中的屬性來獲取的,在實例化PreferenceGroupAdapter對象的時候即讀取,具體代碼如下:

    public PreferenceGroupAdapter(PreferenceGroup preferenceGroup) {
        mPreferenceGroup = preferenceGroup;
        // If this group gets or loses any children, let us know
        mPreferenceGroup.setOnPreferenceChangeInternalListener(this);

        mPreferenceList = new ArrayList();
        mPreferenceLayouts = new ArrayList();
        //start by liweiping 20140523
        TypedArray a = mPreferenceGroup.getContext().obtainStyledAttributes(null,
                R.styleable.RoundCornerPreference, 0, 0);
        mIsRoundCornerPreference = a.getBoolean(R.styleable.RoundCornerPreference_isRoundCorner, false);                                                    
        a.recycle();
        //end by liweiping 20140523
        syncMyPreferences();
    }

③.需要在attrs.xml中增加一個屬性,具體如下(另外一個屬性是我新增的一個ListView的Style,暫時忽略掉吧):

    
        
    
    

④.我們在theme.xml中新增一個主題(注意在public.xml文件中注冊,否則編譯時可能會報錯,找不到該主題)繼承系統自帶的主題,比如說Theme.Holo或者Theme.Holo.Light,在該主題的子節點中將attrs.xml中的isRoundCorner屬性賦值為true。如下所示(我這裡還重新賦值一下系統其它屬性,請忽視):

    

⑤.將我們的Settings應用的主題修改為新增的Theme.Holo.Light.Topwise。這樣就基本上完工了,圓角風格的選擇項只會影響到設置應用,其它應用還是會和之前一樣的風格。


總結:如果讀者能很好的理解了attrs.xml、styles.xml、themes.xml、public.xml這幾個文件直接的關系,就應該很容易想到通過這樣的方式來實現多樣的配置、多樣的主題。

其實,參考小米、OPPO、魅族等主流廠商的設計,他們有自己封裝一個framework,也就是說,自己系統應用使用的是自己的framework,第三方應用使用的是原生的framework,這樣能很方便的增加各種新功能、新接口,同時還不至於影響到第三方應用。這是一個很好的辦法,但也是有缺點的:占用手機空間會加大(這對於目前動則16GB、64GB的手機來說其實也是九牛一毛)。所以,這也是一個大勢所趨。


好了,今天就和大家分析到這裡,關於第二個問題的修改,下次再分析。謝謝!

如果有什麼問題,歡迎留言討論。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved