zoukankan      html  css  js  c++  java
  • Android4.0设置界面改动总结(二)

    今年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<Preference>();
            mPreferenceLayouts = new ArrayList<PreferenceLayout>();
            //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,临时忽略掉吧):

        <declare-styleable name="RoundCornerPreference">
            <attr name="isRoundCorner" format="boolean" />
        <attr name="listViewStyleTopwise" format="reference" />
        </declare-styleable>
    

    ④.我们在theme.xml中新增一个主题(注意在public.xml文件里注冊,否则编译时可能会报错,找不到该主题)继承系统自带的主题。比方说Theme.Holo或者Theme.Holo.Light,在该主题的子节点中将attrs.xml中的isRoundCorner属性赋值为true。

    例如以下所看到的(我这里还又一次赋值一下系统其他属性,请忽视):

        <style name="Theme.Holo.Light.Topwise">
        <item name="listSeparatorTextViewStyle">@android:style/Widget.Holo.Light.TextView.ListSeparator.Topwise</item>
            <item name="textAppearanceMedium">@android:style/TextAppearance.Holo.Light.Medium.Topwise</item>
            <item name="isRoundCorner">true</item>
        <item name="listViewStyleTopwise">@android:style/Widget.Holo.Light.ListView.Topwise</item>
        <item name="textColorSecondary">@android:drawable/selector_text_summary</item>
        <item name="textAppearanceSmall">@android:style/TextAppearance.Holo.Light.Small.Topwise</item>
        </style>
    

    ⑤.将我们的Settings应用的主题改动为新增的Theme.Holo.Light.Topwise。这样就基本上完工了,圆角风格的选择项仅仅会影响到设置应用。其他应用还是会和之前一样的风格。


    总结:假设读者能非常好的理解了attrs.xml、styles.xml、themes.xml、public.xml这几个文件直接的关系。就应该非常easy想到通过这种方式来实现多样的配置、多样的主题。

    事实上。參考小米、OPPO、魅族等主流厂商的设计,他们有自己封装一个framework,也就是说,自己系统应用使用的是自己的framework。第三方应用使用的是原生的framework。这样能非常方便的添加各种新功能、新接口。同一时候还不至于影响到第三方应用。

    这是一个非常好的办法,但也是有缺点的:占用手机空间会加大(这对于眼下动则16GB、64GB的手机来说事实上也是九牛一毛)。所以,这也是一个大势所趋。


    好了,今天就和大家分析到这里,关于第二个问题的改动,下次再分析。

    谢谢!

    假设有什么问题,欢迎留言讨论。


  • 相关阅读:
    JavaScript 面向对象的编程(二) 类的封装
    js 防止重复提交表单
    JavaScript 面向对象的编程(一)
    layui laypage 当前页刷新问题
    jquery 选中设置的值
    突然觉得前端js挺不错的
    centos6.8 安装gitlab记录
    3/25/2018 学**况
    Threading、multiprocessing
    正则表达式 RegEx(Regular Expression)
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7079793.html
Copyright © 2011-2022 走看看