18842388900

网站建设 APP开发 小程序

Article/文章

记录成长点滴 分享您我感悟

您当前位置>首页 > 知识 > 网站建设

ActionBarSherlock框架

每个人都知道Android的ActionBar只能在3.0以上,所以低于3.0,google不提供支持3.0以下ActionBar的软件包,但外国大奶JakeWharton在3.0以下实现ActionBar,JakeWharton Big Dan是ActionBarSherlock,Android-ViewPagerIndicator, NineOldAndroids的作者,一个非常强大的人,Github的注意力超过2.6K,我的左链接有他的Github主页链接,感兴趣的朋友可以关注Next,今天我们正在使用他的开源框架ActionBarSherlock,ActionBarSherlock是让Action Bar函数支持2.X之后的所有平台,并且他会自动确定是否调用本机Action Bar或使用扩展的ActionBar,许多着名的应用程序也使用这个库,之前我不知道ActionBar,所以我去了ActionBarSherlock可以很好地理解ActionBar的使用

让我们先从Github下载这个库,下载地址https://github.com/JakeWharton/ActionBarSherlock,下载它以了解压力,如图所示

CODE_ico.png%20

Xmlns:%20tools='http://schemas.android.com/tools'

Android:%20layout_width='match_parent'

Android:%20layout_height='match_parent'

Android:%20background='@%20android:%20color/white'>%20

Android:%20id='@%20+%20id/viewPager'

Android:%20layout_width='fill_parent'

Android:%20layout_height='wrap_content'/>%20

的RelativeLayout>%20

2.MainActivity代码,单击ActionBar的Tab,ViewPager切换不同的Fragment,滑动ViewPager,选择相应的ActiionBar%20Tab%20

[java]查看plaincopyprint?%20

Packagecom.example.viewpagerandtabdemo;%20

importjava.util.ArrayList;%20

importjava.util.List;%20

Importandroid.os.Bundle;%20

importandroid.support.v4.app.Fragment;%20

importandroid.support.v4.app.FragmentTransaction;%20

importandroid.support.v4.view.ViewPager;%20

importandroid.support.v4.view.ViewPager.OnPageChangeListener;%20

importcom.actionbarsherlock.app.ActionBar;%20

importcom.actionbarsherlock.app.ActionBar.Tab;%20

importcom.actionbarsherlock.app.SherlockFragmentActivity;%20

publicclassMainActivityextendsSherlockFragmentActivityimplementsActionBar.TabListener,OnPageChangeListener%20{

/**%20

*顶部标题标题

*/

privateString%20[]%20mTabTitles;%20

/**%20

*参考ViewPager对象

*/

privateViewPagermViewPager;%20

/**%20

*加载Fragment容器,我们的每个接口都是Fragment%20

*/

privateListmFragmentList;%20

/**%20

*参考ActionBar对象

*/

privateActionBarmActionBar;%20

@override%20

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);%20

的setContentView(R.layout.activity_main);%20

//从资源文件中获取选项卡的标题

mTabTitles=getResources()getStringArray(R.array.tab_title);%20

mFragmentList=newArrayList();%20

mViewPager=(ViewPager)findViewById(R.id.viewPager);%20

//设置适配器

mViewPager.setAdapter(newTabPagerAdapter(getSupportFragmentManager(),mFragmentList));%20

//设置监听器

mViewPager.setOnPageChangeListener(本);%20

//获取我们使用getSupportActionBar()方法的Action实例

mActionBar=getSupportActionBar();%20

//隐藏标题

mActionBar.setDisplayShowTitleEnabled(假);%20

//隐藏Homelogo%20

mActionBar.setDisplayShowHomeEnabled(假);%20

//将ActionBar的导航模式设置为Tab%20

mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);%20

//将一个Tab添加到ActionBar并设置TabListener%20

对于(INTI=0;%20I;>%20

ActionBar.Tabtab=mActionBar.newTab();%20

tab.setText(mTabTitles%20[I]);%20

tab.setTabListener(本);%20

mActionBar.addTab(选项卡,I);%20

}%20

//将片段添加到列表中并将Tab的标题传递给片段

对于(INTI=0;%20I;取代;>%20

Fragmentfragment=newItemFragment();%20

Bundleargs=newBundle();%20

args.putString(%20'ARG',mTabTitles%20[I]);%20

fragment.setArguments(参数);%20

mFragmentList.add(片段);%20

}%20

}%20

@override%20

publicvoidonTabSelected(Tabtab,FragmentTransactionft){

//单击ActionBarTab%20

时切换到不同的Fragment界面

mViewPager.setCurrentItem(tab.getPosition());%20

}%20

@override%20

publicvoidonTabUnselected(Tabtab,FragmentTransactionft){

}%20

@override%20

publicvoidonTabReselected(Tabtab,FragmentTransactionft){

}%20

@override%20

publicvoidonPageScrollStateChanged(intarg0){

}%20

@override%20

publicvoidonPageScrolled(intarg0,floatarg1,intarg2){

}%20

@override%20

publicvoidonPageSelected(intarg0){

//滑动ViewPager时,将相应的ActionBarTab设置为

mActionBar.setSelectedNavigationItem(为arg0);%20

}%20

}%20

;取代;>%20

当我们使用ActionBarSherlock时,我们不再继承Activity,而是继承SherlockActivity,SherlockDialogFragment,SherlockFragmentActivity等。我在这里使用Fragment,所以我继承了SherlockFragmentActivity,我们不能只设置Activity的主题,我们将直接在全屏设置android稍后显示。%20theme='@%20android:%20style/Theme.Black.NoTitleBar',我们无法使用ActionBar设置它,我们无法随便设置他的主题,它必须是Theme.Sherlock,Theme.Sherlock.Light,Theme%20.Sherlock.Light%20.DarkActionBar,或者它们的子类,否则会抛出java.lang.IllegalStateException,所以为了自定义ActionBar的Tab,我们必须修改它的样式

注意:我们还必须删除ViewPagerAndTab工程libs下面的android-support-v4.jar包,因为在ActionBarSherlock已经包含android-support-v4.jar

3.ViewPager适配器TabPagerAdapter,因为我们使用Fragment,所以我们继承了FragmentStatePagerAdapter而不是PagerAdapter%20

[java]查看plaincopyprint?%20

Packagecom.example.viewpagerandtabdemo;%20

importjava.util.List;%20

importandroid.support.v4.app.Fragment;%20

importandroid.support.v4.app.FragmentManager;%20

importandroid.support.v4.app.FragmentStatePagerAdapter;%20

publicclassTabPagerAdapterextendsFragmentStatePagerAdapter%20{

privateListlist;%20

//构造函数

publicTabPagerAdapter(FragmentManagerfm,Listlist){

超级(FM);%20

This.list=列表;%20

}%20

@override%20

publicFragmentgetItem(intarg0){

Returnlist.get(为arg0);%20

}%20

@override%20

publicintgetCount(){

Returnlist.size();%20

}%20

}%20

4.ItemFragment继承了SherlockFragment,也可以直接继承Fragment。内部布局相对简单。%20TextView用于显示从Activity传递的ActionBar%20Tab的标题。

[java]查看plaincopyprint?%20

Packagecom.example.viewpagerandtabdemo;%20

Importandroid.os.Bundle;%20

importandroid.view.LayoutInflater;%20

Importandroid.view.View;%20

importandroid.view.ViewGroup;%20

importandroid.widget.TextView;%20

importcom.actionbarsherlock.app.SherlockFragment;%20

publicclassItemFragmentextendsSherlockFragment%20{

@override%20

publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,

BundlesavedInstanceState){

ViewcontextView=inflater.inflate(R.layout.fragment_item,容器,FALSE);%20

TextViewmTextView=(TextView的)contextView.findViewById(R.id.textview);%20

//获取Activity传递的参数

BundlemBundle=getArguments();%20

Stringtitle=mBundle.getString(%20'ARG');%20

mTextView.setText(标题);%20

returncontextView;%20

}%20

@override%20

publicvoidonActivityCreated(BundlesavedInstanceState){

super.onActivityCreated(savedInstanceState);%20

}%20

}%20

然后我们将上面Activity的主题设置为android:%20theme='@style/Theme.Sherlock.Light.DarkActionBar'运行项目看效果,下图是项目的效果,图2是效果网易

%20

这是一个很大的区别吗?人们下面的酒吧是红色的,我们正在制作蓝色,选中Tab的人的字体颜色是红色的,我们的颜色不会变色等等,那么我们怎样才能制作网易新闻的效果,我们需要改变它的风格,改变如下

[html]查看plaincopyprint?%20

@%20nullitem>%20

45dipitem>%20

@风格/Widget.Sherlock.ActionBar.TabTextitem>%20

@风格/Widget.Sherlock.ActionBar.TabViewitem>%20

@风格/Widget.Slider.ActionBaritem>%20

样式和GT;%20

@绘制/base_action_bar_bgitem>%20

样式和GT;%20

@绘制/selector_tabtextitem>%20

15spitem>%20

样式和GT;%20

@绘制/tab_indicatoritem>%20

8dipitem>%20

8dipitem>%20

样式和GT;%20

有一些图片,选择器我没有发布,你可以下载代码看效果,改变样式运行效果

%20

好的,今天的解释在这里结束了。如果您有任何疑问,请在下面留言。如果您有兴趣,可以查看开源框架ViewPageIndicator和ViewPager模仿网易新闻客户端Tab标签

源代码下载,请点击

许多朋友说他们对如何设置4.1的风格没有影响。首先,这个库在2.X机器上使用ActionBar。在3.0之后,它使用了Andriod附带的ActionBar,因此3.0系统中使用的样式是android。样式,所以我们必须修改样式文件如下

[html]查看plaincopyprint?ico_fork.svg

@ nullitem>

@ nullitem>

45dipitem>

45dipitem>

@风格/Widget.Sherlock.ActionBar.TabTextitem>

@风格/Widget.Sherlock.ActionBar.TabTextitem>

@风格/Widget.Sherlock.ActionBar.TabViewitem>

@风格/Widget.Sherlock.ActionBar.TabViewitem>

@风格/Widget.Slider.ActionBaritem>

@风格/Widget.Slider.ActionBaritem>

样式和GT;

@绘制/base_action_bar_bgitem>

@绘制/base_action_bar_bgitem>

样式和GT;

@绘制/selector_tabtextitem>

15spitem>

样式和GT;

@绘制/tab_indicatoritem>

8dipitem>

8dipitem>

样式和GT;

标签:& nbsp& nbsp沈阳app开发&营销类型网站建设& nbsp沈阳App Design& ActionBarSherlock框架

网站建设,小程序开发,小程序制作,微信小程序开发,公众号开发,微信公众号开发,网页设计,网站优化,网站排名,网站设计,微信小程序设计,小程序定制,微信小程序定制

相关案例查看更多