您的位置:首页 > 其它

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

2014-06-20 09:11 211 查看
     首先设置的所有 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);

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: