編輯:關於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、styles.xml、themes.xml、public.xml這幾個文件直接的關系,就應該很容易想到通過這樣的方式來實現多樣的配置、多樣的主題。
其實,參考小米、OPPO、魅族等主流廠商的設計,他們有自己封裝一個framework,也就是說,自己系統應用使用的是自己的framework,第三方應用使用的是原生的framework,這樣能很方便的增加各種新功能、新接口,同時還不至於影響到第三方應用。這是一個很好的辦法,但也是有缺點的:占用手機空間會加大(這對於目前動則16GB、64GB的手機來說其實也是九牛一毛)。所以,這也是一個大勢所趨。
好了,今天就和大家分析到這裡,關於第二個問題的修改,下次再分析。謝謝!
如果有什麼問題,歡迎留言討論。
綜述Android中的事件分發機制也就是View與ViewGroup的對事件的分發與處理。在ViewGroup的內部包含了許多View,而ViewGroup繼承自View
TabLayout是Android 的Material Design包中的一個控件,可以和V4包中的ViewPager搭配產生一個聯動的效果。這裡我自定義了一
這篇博客我們來一發自定義控件的實戰,恰好前些天有一個小需求,效果圖如下:??根據效果圖,我們可以確定,用自定義View完全可以搞定,在自定義控件系列博客第一篇中,我們總結
MSM8909+Android5.1.1SPI驅動開發(PSAM部分) 1. PSAM部分的硬件設計 圖1CS 片選信號SCK 時鐘信號MISO 主設