原生Camera设置的分析(一):布局

来源:互联网 发布:免费网络存储 编辑:程序博客网 时间:2024/05/29 11:52

     首先设置的所有 list 用了两种自定义的控件,一种定义为SettingListLayout.java,另一个的定义为InLineSettingRestore.java。“还原默认设置”用的控件是InLineSettingRestore,其它的list用的是SettingListLayout。对应的布局文件如下:

     setting_list_layout.xml

<?xml version="1.0" encoding="utf-8"?><com.android.camera.ui.SettingListLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="wrap_content"    android:layout_height="wrap_content">    <ListView android:id="@+id/settingList"        style="@style/SettingItemList"        android:layout_gravity="top" /></com.android.camera.ui.SettingListLayout>    

       in_line_setting_restore.xml

<?xml version="1.0" encoding="utf-8"?><com.android.camera.ui.InLineSettingRestore xmlns:android="http://schemas.android.com/apk/res/android"    style="@style/SettingRow" >    <TextView android:id="@+id/title"        style="@style/SettingItemRestore" /></com.android.camera.ui.InLineSettingRestore>

      SettingManager.java的关键代码如下:

private void initializeSettings() {        if (mSettingLayout == null && getContext().getPreferenceGroup() != null) {            mSettingLayout = (ViewGroup) getContext().inflate(R.layout.setting_container,                    SETTING_PAGE_LAYER);            mTabHost = (TabHost)mSettingLayout.findViewById(R.id.tab_title);            mTabHost.setup();                        List<Holder> list = new ArrayList<Holder>();            <....................................................................................................................................................................................................................................................................................................................>            int size = list.size();                                    List<SettingListLayout> pageViews = new ArrayList<SettingListLayout>();            for (int i = 0; i < size; i++) {                Holder holder = list.get(i);                //new page view                SettingListLayout pageView = (SettingListLayout)getContext()                        .inflate(R.layout.setting_list_layout, SETTING_PAGE_LAYER);                pageView.initialize(SettingChecker.getSettingKeys(holder.mSettingKeys), i == 0);                                                pageViews.add(pageView);                //new indicator view                ImageView indicatorView = new ImageView(getContext());                indicatorView.setBackgroundResource(R.drawable.bg_tab_title);                indicatorView.setImageResource(holder.mIndicatorIconRes);                indicatorView.setScaleType(ScaleType.CENTER);                mTabHost.addTab(mTabHost.newTabSpec(holder.mIndicatorKey)                        .setIndicator(indicatorView)                        .setContent(android.R.id.tabcontent));            }                        mAdapter = new MyPagerAdapter(pageViews);            mPager = (ViewPager) mSettingLayout.findViewById(R.id.pager);            mPager.setAdapter(mAdapter);            mPager.setOnPageChangeListener(mAdapter);            mTabHost.setOnTabChangedListener(this);        }        Util.setOrientation(mSettingLayout, getOrientation(), false);    }

     1、 首先 List<Holder> list = new ArrayList<Holder>();是定义的三个Tab ;

     2、然后定义一下设置的列表项List<SettingListLayout> pageViews = new ArrayList<SettingListLayout>();

     3、“还原默认设置”项的添加代码是pageView.initialize(SettingChecker.getSettingKeys(holder.mSettingKeys), i == 0);

     4、最后将所有的列表添加进来:pageViews.add(pageView);

    最后,将上面完成的设置项添加到适配器里来,代码如下:

mAdapter = new MyPagerAdapter(pageViews);            mPager = (ViewPager) mSettingLayout.findViewById(R.id.pager);            mPager.setAdapter(mAdapter);            mPager.setOnPageChangeListener(mAdapter);            mTabHost.setOnTabChangedListener(this);

    

0 0