actionbarsherlock怎么设置word背景颜色色

开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端 - 推酷
开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端
大家都知道Android的ActionBar是在3.0以上才有的,那么在3.0以下呢,google并没有给我提供在3.0以下支持ActionBar的包,但是外国的大牛JakeWharton实现了在3.0以下使用ActionBar,&JakeWharton这位大牛是ActionBarSherlock,Android-ViewPagerIndicator ,NineOldAndroids的作者,非常厉害的一个人,Github的关注量超过2.6K,我左侧的友情链接里面有他的Github的主页链接,有兴趣的朋友可以去follow下他,今天我们使用的是他的开源框架ActionBarSherlock,ActionBarSherlock是让Action Bar功能支持2.X后的所有平台,而且他会自动的判断是调用原生Action Bar还是使用扩展ActionBar,很多知名的应用也使用这个库,我之前对ActionBar也不了解,所以就去下了ActionBarSherlock来好好的了解了解ActionBar的使用
我们先从Github上面先下载这个库,下载地址
,下载好了解压如图
把红色框框标记的文件导入Eclipse里面,我们可以先看下例子,来了解下ActionBar的一些使用情况
我们新建一个Android工程,叫ViewPagerAndTab,然后指定
ActionBarSherlock为
ViewPagerAndTab的库工程,右键工程---&Properties
通过上面的几步我们就指定ActionBarSherlock为ViewPagerAndTab的库工程,接下来我们就能在3.0一下使用ActionBar,我这里使用的是ActionBar &Tab和ViewPager仿网易新闻,我们看看主要代码的编写
1.先看布局文件,里面一个ViewPager,非常简单
&RelativeLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:background=&@android:color/white&&
&android.support.v4.view.ViewPager
android:id=&@+id/viewPager&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content& /&
&/RelativeLayout&
2.MainActivity代码,点击ActionBar的Tab,ViewPager切换不同的Fragment,滑动
ViewPager,选中相对应的ActiionBar Tab
package com.example.
import java.util.ArrayL
import java.util.L
import android.os.B
import android.support.v4.app.F
import android.support.v4.app.FragmentT
import android.support.v4.view.ViewP
import android.support.v4.view.ViewPager.OnPageChangeL
import com.actionbarsherlock.app.ActionB
import com.actionbarsherlock.app.ActionBar.T
import com.actionbarsherlock.app.SherlockFragmentA
public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener, OnPageChangeListener{
* 顶部Tab的title
private String [] mTabT
* ViewPager对象的引用
private ViewPager mViewP
* 装载Fragment的容器,我们的每一个界面都是一个Fragment
private List&Fragment& mFragmentL
* ActionBar对象的引用
private ActionBar mActionB
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//从资源文件在获取Tab的title
mTabTitles = getResources().getStringArray(R.array.tab_title);
mFragmentList =
new ArrayList&Fragment&();
mViewPager = (ViewPager) findViewById(R.id.viewPager);
//设置Adapter
mViewPager.setAdapter(new TabPagerAdapter(getSupportFragmentManager(), mFragmentList));
//设置监听
mViewPager.setOnPageChangeListener(this);
//获取Action实例我们使用getSupportActionBar()方法
mActionBar = getSupportActionBar();
//隐藏Title
mActionBar.setDisplayShowTitleEnabled(false);
//隐藏Home logo
mActionBar.setDisplayShowHomeEnabled(false);
//设置ActionBar的导航模式为Tab
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//为ActionBar添加Tab并设置TabListener
for(int i=0; i&mTabTitles. i++){
ActionBar.Tab tab = mActionBar.newTab();
tab.setText(mTabTitles[i]);
tab.setTabListener(this);
mActionBar.addTab(tab, i);
//将Fragment加入到List中,并将Tab的title传递给Fragment
for(int i=0; i&mTabTitles. i++){
Fragment fragment = new ItemFragment();
Bundle args = new Bundle();
args.putString(&arg&, mTabTitles[i]);
fragment.setArguments(args);
mFragmentList.add(fragment);
public void onTabSelected(Tab tab, FragmentTransaction ft) {
//点击ActionBar Tab的时候切换不同的Fragment界面
mViewPager.setCurrentItem(tab.getPosition());
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
public void onTabReselected(Tab tab, FragmentTransaction ft) {
public void onPageScrollStateChanged(int arg0) {
public void onPageScrolled(int arg0, float arg1, int arg2) {
public void onPageSelected(int arg0) {
//滑动ViewPager的时候设置相对应的ActionBar Tab被选中
mActionBar.setSelectedNavigationItem(arg0);
我们使用ActionBarSherlock的时候不再是继承Activity,而是继承SherlockActivity,SherlockDialogFragment,SherlockFragmentActivity等等,我这里用到Fragment,所以继承SherlockFragmentActivity,我们不能随便设置Activity的theme,以后我们要全屏显示的时候直接设置android:theme=&@android:style/Theme.Black.NoTitleBar&
,我们使用ActionBar就不能这样设置了,并且不能随便设置他的Theme,必须是Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar,或者是他们的子样式,不然就会出java.lang.IllegalStateException异常,所以为了自定义ActionBar的Tab,我们必须修改其style
注意:我们还必须删除ViewPagerAndTab工程libs下面的android-support-v4.jar包,因为在ActionBarSherlock已经包含android-support-v4.jar
3.ViewPager的适配器TabPagerAdapter,因为我们用到Fragment,所以我们继承FragmentStatePagerAdapter而不是PagerAdapter
package com.example.
import java.util.L
import android.support.v4.app.F
import android.support.v4.app.FragmentM
import android.support.v4.app.FragmentStatePagerA
public class TabPagerAdapter extends FragmentStatePagerAdapter {
private List&Fragment&
//构造函数
public TabPagerAdapter(FragmentManager fm, List&Fragment& list) {
super(fm);
this.list =
public Fragment getItem(int arg0) {
return list.get(arg0);
public int getCount() {
return list.size();
4.ItemFragment 继承SherlockFragment,也可以直接继承Fragment,里面的的布局比较简单,一个TextView用来显示从Activity传递过来的ActionBar Tab的title
package com.example.
import android.os.B
import android.view.LayoutI
import android.view.V
import android.view.ViewG
import android.widget.TextV
import com.actionbarsherlock.app.SherlockF
public class ItemFragment extends SherlockFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View contextView = inflater.inflate(R.layout.fragment_item, container, false);
TextView mTextView = (TextView) contextView.findViewById(R.id.textview);
//获取Activity传递过来的参数
Bundle mBundle = getArguments();
String title = mBundle.getString(&arg&);
mTextView.setText(title);
return contextV
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
然后我们将上面的Activity的theme设置成android:theme=&@style/Theme.Sherlock.Light.DarkActionBar& 运行项目看看效果,下图一是项目的效果,图二是网易的效果
是不是相差很大呢?人家下面的指示条是红色的,我们做出来的是黑色的,人家选中Tab的字体颜色是红色,我们的不变色等等,那么我们要怎么才能做出网易新闻的那样子的效果,我们需要改变其style,改变如下
&style name=&Themes.ActionBarTab& parent=&@style/Theme.Sherlock&&
&!-- 去除ActionBar的Divider --&
&item name=&actionBarDivider&&@null&/item&
&!-- 设置ActionBar Tab的高度 --&
&item name=&actionBarSize&&45dip&/item&
&!-- 设置ActionBar Tab字体的样式 --&
&item name=&actionBarTabTextStyle&&@style/Widget.Sherlock.ActionBar.TabText&/item&
&!-- 设置ActionBar Tab的样式,例如下面的红色指引,Tab之间的间隙等等 --&
&item name=&actionBarTabStyle&&@style/Widget.Sherlock.ActionBar.TabView&/item&
&!-- 设置ActionBar的样式,这里简单的设置了ActionBar的背景 --&
&item name=&actionBarStyle&&@style/Widget.Slider.ActionBar&/item&
&style name=&Widget.Slider.ActionBar& parent=&@style/Widget.Sherlock.ActionBar&&
&item name=&backgroundStacked&&@drawable/base_action_bar_bg&/item&
&style name=&Widget.Sherlock.ActionBar.TabText& parent=&android:Widget.Holo.ActionBar.TabText&&
&item name=&android:textColor&&@drawable/selector_tabtext&/item&
&item name=&android:textSize&&15sp&/item&
&style name=&Widget.Sherlock.ActionBar.TabView& parent=&Widget&&
&item name=&android:background&&@drawable/tab_indicator&/item&
&item name=&android:paddingLeft&&8dip&/item&
&item name=&android:paddingRight&&8dip&/item&
还有一些图片,selector我没有贴出来,可以去下载代码看看效果,改变style运行效果
好了,今天的讲解到此结束,有疑问的朋友请在下面留言
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见新浪微博Android客户端实战 – 使用ActionBarSherlock与MenuDrawer | lytsing's Blog
Categories如何在Actionbarsherlock中一直显示overflow效果_百度知道
如何在Actionbarsherlock中一直显示overflow效果
提问者采纳
因此希望能够通过其他的办法将overfow menu在有硬件菜单栏的手机中也显示出来。对于有硬件菜单按钮的情况?
具体地。对于这样一种菜单栏的设计:
这里的两个回答分别给出了两个相应的解决办法。这个办法我发现在大部分手机中都是有效的,点击后弹出的是在oncreateOptionMenu函数中设置的菜单内容,对于原生的actionbar来说.1.0之后就没有了,如果在不同终端中使用同一个软件显示不同的界面是一项体验不好的设计,在4,这个办法也容易想到,并且在程序中强制显示overflow menu,但是到了4,增加维护成本,有一个overflow menu。
针对这个问题的解决办法,这里也有更详细的说明.1.2版本中是有forceOverflow的选项可以进行设置的,从而有可能没有办法获得actionbarsherlock的新功能或者对于旧的bug的修复,在没有手机没有硬件菜单按钮的情况下,会显示在actionbar的最右侧。一个办法是对actionbarsherlock的源码进行修改.2版本的actionbarsherlock,不过会使得actionbarsherlock的库被改变,overflow menu就不会显示出来。并且经过测试在某些少数类型的手机中仍无法显示overflow menu。
针对actionbarsherlcok,虽然google说是考虑了一致性之后的结果,但是我还是觉得对于用户来说.2。
因此便产生了使用新办法来实现overflow menu的想法。一个解决办法是使用4,但是存在的问题就是没有办法随着actionbarsherlock的更新做相应的升级如何在各种类型的手机的actionbarsherlock中都显示overflow menu
电子产品技术支持
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 actionbarsherlock 的文章

 

随机推荐