接上篇博文:http://blog.csdn.net/geniuseoe2012/article/details/8982469

其中提到了Github-Client用到了很多开源的第三方库

首单其冲的便是ActionBarSherklock,众所周知从Android3.0开始就提供了ActionBar,这让Android的用户体验强了好多,但是这个ActionBarAndroid3.0以下是不支持的,谷歌也没推出什么解决方案,不过没有什么是做不到的,在github上有牛人放出了开源的ActionBarSherlock使得在Android2.x上实现ActionBar,如果你在Android3.0的手机上使用,它就会调用原生的ActionBar,下面蓝老师就结合实际用例简单的谈谈它的使用

首先从https://github.com/JakeWharton/ActionBarSherlock上下载源码,得到目录


其中actionbarsherlock作为链接工程要被其它工程引用

actionbarsherlock-samples里是一些示例工程,其实就是一些API的使用demo

这个狠重要,童鞋们要仔细看,对着代码把示例全都跑一遍,基本就能掌握其使用方法了

不过由于demo里的示例大多用的ActionBarSherklock原生样式或是系统自带样式

而我们的项目往往有一套自己的风格,这就需要我们改造style设置theme

具体可参照示例工程style,其效果运行如下:


本文就以网易新闻客户端的actionbar应用为蓝本,来剖析一下各种奥妙

先上效果图,原版


蓝老师的山寨版


上代码片段:

public class SliderTabPagerActivity extends SherlockFragmentActivity implements OnPageChangeListener,TabListener{private  int COUNT = 0;private List<DataStruct> mList;private ViewPager mViewPager;private LayoutInflater mInflater;@Overrideprotected void onCreate(Bundle arg0) {super.onCreate(arg0);setContentView(R.layout.slider_tab_pager_layout); setupViews();initData();}  @Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getSupportMenuInflater().inflate(R.menu.main_menu, menu);    return true;    }  @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {        case android.R.id.home:        Toast.makeText(this, "home", Toast.LENGTH_SHORT).show();            return true;        case R.id.menu_setting:        Toast.makeText(this, "setting", Toast.LENGTH_SHORT).show();            return true;        default:            return super.onOptionsItemSelected(item);        }    }private void setupViews(){ mInflater = getLayoutInflater(); mViewPager = (ViewPager)findViewById(R.id.pager); mViewPager.setOnPageChangeListener(this);     ActionBar actionBar = getSupportActionBar();     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);          String[] arrStrings = getResources().getStringArray(R.array.sections);     COUNT = arrStrings.length;         for (int i = 0; i < COUNT; i++) {        Tab tab =  actionBar.newTab();        tab.setCustomView(getTabView(arrStrings[i]));        tab.setTabListener(this);        actionBar.addTab(tab);               }             actionBar.setDisplayHomeAsUpEnabled(true);         actionBar.setLogo(R.drawable.biz_pics_main_back_normal);         actionBar.setTitle("网易图片");}private void initData(){mList = new ArrayList<DataStruct>();for(int i = 0; i < COUNT; i++){DataStruct struct = new DataStruct();struct.index = i;struct.daString = "tab-->" + i;mList.add(struct);}mViewPager.setAdapter(new SliderPagerAdapter(getSupportFragmentManager(), mList));}private View getTabView(String title){View view = mInflater.inflate(R.layout.tab_item_layout, null);TextView textView = (TextView) view.findViewById(R.id.textView);textView.setText(title);return view;}@Overridepublic void onPageScrollStateChanged(int arg0) {// TODO Auto-generated method stub}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {// TODO Auto-generated method stub}@Overridepublic void onPageSelected(int position) {      getSupportActionBar().setSelectedNavigationItem(position);}@Overridepublic void onTabSelected(Tab tab, FragmentTransaction ft) { mViewPager.setCurrentItem(tab.getPosition());}@Overridepublic void onTabUnselected(Tab tab, FragmentTransaction ft) {// TODO Auto-generated method stub}@Overridepublic void onTabReselected(Tab tab, FragmentTransaction ft) {// TODO Auto-generated method stub}class SliderPagerAdapter extends FragmentStatePagerAdapter{private List<DataStruct> mList;public SliderPagerAdapter(FragmentManager fm, List<DataStruct> list) {super(fm);mList = list;}@Overridepublic Fragment getItem(int pos) {return new SliderFragment(mList.get(pos));}@Overridepublic int getCount() {return mList.size();}}public static class SliderFragment extends SherlockFragment{private DataStruct mStruct;public SliderFragment(DataStruct struct){mStruct = struct;}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.layout1, null);TextView tView = (TextView) view.findViewById(R.id.textView);tView.setText(mStruct.toString());return view;}}}

Sytle配置

 <style name="Themes.Sliders.Actionbar" parent="@style/Theme.Sherlock.Light">        <item name="actionBarStyle">@style/Widget.Slider.ActionBar</item>    <item name="actionBarTabStyle">@style/Widget.Slider.ActionBarTab</item>         <item name="actionBarItemBackground">@drawable/selector_actionbar_button</item>        <item name="homeAsUpIndicator">@drawable/biz_widget_left</item>        <item name="android:actionBarStyle">@style/Widget.Slider.ActionBar</item>    <item name="android:actionBarTabStyle">@style/Widget.Slider.ActionBarTab</item>     <item name="android:actionBarItemBackground">@drawable/selector_actionbar_button</item>        <item name="android:homeAsUpIndicator">@drawable/biz_widget_left</item>    </style>        <style name="Widget.Slider.ActionBar" parent="@style/Widget.Sherlock.ActionBar">          <item name="android:background">@drawable/base_actionbar_bg</item>             <item name="android:backgroundStacked">#ffeeeeee</item>        <item name="android:titleTextStyle">@style/TextAppearance.Slider.Widget.ActionBar.Titlen</item>        <item name="titleTextStyle">@style/TextAppearance.Slider.Widget.ActionBar.Titlen</item>        <item name="background">@drawable/base_actionbar_bg</item>             <item name="backgroundStacked">#ffeeeeee</item>    </style>         <style name="Widget.Slider.ActionBarTab" parent="@style/Widget.Sherlock.ActionBar.TabView">               <item name="android:background">@drawable/tab_indicator</item>    </style>    <style name="Widget.Slider.ActionButton" parent="@style/Widget.Sherlock.ActionButton">        <item name="android:background">@drawable/selector_actionbar_button</item>        <item name="background">@drawable/selector_actionbar_button</item>    </style>       <style name="TextAppearance.Slider.Widget.ActionBar.Titlen" parent="@style/TextAppearance.Sherlock.Widget.ActionBar.Title">       <item name="android:textColor">#eeeeee</item>       <item name="android:textSize">20sp</item>    </style>


大家把工程down下来仔细比对下就知道哪些字段对应哪些UI效果

欲更多深入了解就多瞅瞅ActionBarSherklock工程里的style文件

自定义style继承原生style再修改对应字段就OK

大家应该注意到style里的字段会有android前缀和无android前缀的字段如

 <style name="Widget.Slider.ActionBar" parent="@style/Widget.Sherlock.ActionBar">          <item name="android:background">@drawable/base_actionbar_bg</item>             <item name="android:backgroundStacked">#ffeeeeee</item>        <item name="android:titleTextStyle">@style/TextAppearance.Slider.Widget.ActionBar.Titlen</item>        <item name="titleTextStyle">@style/TextAppearance.Slider.Widget.ActionBar.Titlen</item>        <item name="background">@drawable/base_actionbar_bg</item>             <item name="backgroundStacked">#ffeeeeee</item>    </style>

这是因为2.x里使用其sytle的时候用到的是无android前缀的字段ITEM3.0以上的则是用到原生的,所以二者都要设值,否则在不同的系统版本上就可能出不来效果


最后附上工程链接:

http://download.csdn.net/detail/geniuseoe2012/5535041


欲知后事如何,且听下回分解

morebrilliantPleasepayattentiontomyCSDNblog-->http://blog.csdn.net/geniuseoe2012


更多相关文章

  1. android attr.xml 怎么在主工程中设置library项目中背景或者其他
  2. Android用户界面程序设计示例
  3. android 在源码中编译工程的方法
  4. android监控SIM卡状态的广播示例代码
  5. Android(安卓)sdk开发之一 测距功能
  6. Android培训---创建Android工程
  7. Android(安卓)ApiDemos示例解析(53):Graphics->Arcs
  8. 使用NDK插件并支持NDK调试(DEBUG)
  9. Android笔记2——开发前奏2工程目录介绍和两个小应用

随机推荐

  1. Python可以比C++更快,你不信?
  2. 求求你,别用 print 来 debug 了
  3. 谷歌推出人工智能DIY套件:用硬纸板打造你
  4. 谁来接棒深度学习?
  5. IBM推出开源工具帮AI抵御对抗性样本***:DN
  6. 苹果重新开源分布式数据库FoundationDB,已
  7. Segment 放弃了微服务
  8. 90亿美元的“近十年第一版权案”,谷歌、甲
  9. 拜互联网所赐,软件市场和企业规模因此扩大
  10. 数组函数、json、ajax、cors跨域