線上服務(wù)咨詢
Article/文章
記錄成長點滴 分享您我感悟
您當(dāng)前位置>首頁 > 知識 > 網(wǎng)站建設(shè)
ActionBarSherlock框架
發(fā)表時間:2019-07-30 16:32:29
文章來源:沈陽軟件開發(fā)
標(biāo)簽:網(wǎng)站建設(shè) 小程序開發(fā) 小程序制作 微信小程序開發(fā) 公眾號開發(fā) 微信公眾號開發(fā) 網(wǎng)頁設(shè)計 網(wǎng)站優(yōu)化 網(wǎng)站排名 網(wǎng)站設(shè)計 微信小程序設(shè)計 小程序定制 微信小程序定制
瀏覽次數(shù):0
每個人都知道Android的ActionBar只能在3.0以上,所以低于3.0,google不提供支持3.0以下ActionBar的軟件包,但外國大奶JakeWharton在3.0以下實現(xiàn)ActionBar,JakeWharton Big Dan是ActionBarSherlock,Android-ViewPagerIndicator, NineOldAndroids的作者,一個非常強大的人,Github的注意力超過2.6K,我的左鏈接有他的Github主頁鏈接,感興趣的朋友可以關(guān)注Next,今天我們正在使用他的開源框架ActionBarSherlock,ActionBarSherlock是讓Action Bar函數(shù)支持2.X之后的所有平臺,并且他會自動確定是否調(diào)用本機Action Bar或使用擴展的ActionBar,許多著名的應(yīng)用程序也使用這個庫,之前我不知道ActionBar,所以我去了ActionBarSherlock可以很好地理解ActionBar的使用
讓我們先從Github下載這個庫,下載地址https://github.com/JakeWharton/ActionBarSherlock,下載它以了解壓力,如圖所示
%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,選擇相應(yīng)的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
*頂部標(biāo)題標(biāo)題
*/
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
//從資源文件中獲取選項卡的標(biāo)題
mTabTitles=getResources()getStringArray(R.array.tab_title);%20
mFragmentList=newArrayList();%20
mViewPager=(ViewPager)findViewById(R.id.viewPager);%20
//設(shè)置適配器
mViewPager.setAdapter(newTabPagerAdapter(getSupportFragmentManager(),mFragmentList));%20
//設(shè)置監(jiān)聽器
mViewPager.setOnPageChangeListener(本);%20
//獲取我們使用getSupportActionBar()方法的Action實例
mActionBar=getSupportActionBar();%20
//隱藏標(biāo)題
mActionBar.setDisplayShowTitleEnabled(假);%20
//隱藏Homelogo%20
mActionBar.setDisplayShowHomeEnabled(假);%20
//將ActionBar的導(dǎo)航模式設(shè)置為Tab%20
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);%20
//將一個Tab添加到ActionBar并設(shè)置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的標(biāo)題傳遞給片段
對于(INTI=0;%20I;取代;>%20
Fragmentfragment=newItemFragment();%20
Bundleargs=newBundle();%20
args.putString(%20'ARG',mTabTitles%20[I]);%20
fragment.setArguments(參數(shù));%20
mFragmentList.add(片段);%20
}%20
}%20
@override%20
publicvoidonTabSelected(Tabtab,F(xiàn)ragmentTransactionft){
//單擊ActionBarTab%20
時切換到不同的Fragment界面mViewPager.setCurrentItem(tab.getPosition());%20
}%20
@override%20
publicvoidonTabUnselected(Tabtab,F(xiàn)ragmentTransactionft){
}%20
@override%20
publicvoidonTabReselected(Tabtab,F(xiàn)ragmentTransactionft){
}%20
@override%20
publicvoidonPageScrollStateChanged(intarg0){
}%20
@override%20
publicvoidonPageScrolled(intarg0,floatarg1,intarg2){
}%20
@override%20
publicvoidonPageSelected(intarg0){
//滑動ViewPager時,將相應(yīng)的ActionBarTab設(shè)置為
mActionBar.setSelectedNavigationItem(為arg0);%20
}%20
}%20
;取代;>%20
當(dāng)我們使用ActionBarSherlock時,我們不再繼承Activity,而是繼承SherlockActivity,SherlockDialogFragment,SherlockFragmentActivity等。我在這里使用Fragment,所以我繼承了SherlockFragmentActivity,我們不能只設(shè)置Activity的主題,我們將直接在全屏設(shè)置android稍后顯示。%20theme='@%20android:%20style/Theme.Black.NoTitleBar',我們無法使用ActionBar設(shè)置它,我們無法隨便設(shè)置他的主題,它必須是Theme.Sherlock,Theme.Sherlock.Light,Theme%20.Sherlock.Light%20.DarkActionBar,或者它們的子類,否則會拋出java.lang.IllegalStateException,所以為了自定義ActionBar的Tab,我們必須修改它的樣式
注意:我們還必須刪除ViewPagerAndTab工程libs下面的android-support-v4.jar包,因為在ActionBarSherlock已經(jīng)包含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
//構(gòu)造函數(shù)
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。內(nèi)部布局相對簡單。%20TextView用于顯示從Activity傳遞的ActionBar%20Tab的標(biāo)題。
[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,容器,F(xiàn)ALSE);%20
TextViewmTextView=(TextView的)contextView.findViewById(R.id.textview);%20
//獲取Activity傳遞的參數(shù)
BundlemBundle=getArguments();%20
Stringtitle=mBundle.getString(%20'ARG');%20
mTextView.setText(標(biāo)題);%20
returncontextView;%20
}%20
@override%20
publicvoidonActivityCreated(BundlesavedInstanceState){
super.onActivityCreated(savedInstanceState);%20
}%20
}%20
然后我們將上面Activity的主題設(shè)置為android:%20theme='@style/Theme.Sherlock.Light.DarkActionBar'運行項目看效果,下圖是項目的效果,圖2是效果網(wǎng)易
%20
這是一個很大的區(qū)別嗎?人們下面的酒吧是紅色的,我們正在制作藍色,選中Tab的人的字體顏色是紅色的,我們的顏色不會變色等等,那么我們怎樣才能制作網(wǎng)易新聞的效果,我們需要改變它的風(fēng)格,改變?nèi)缦?/p>
[html]查看plaincopyprint?%20
@%20nullitem>%20
45dipitem>%20
@風(fēng)格/Widget.Sherlock.ActionBar.TabTextitem>%20
@風(fēng)格/Widget.Sherlock.ActionBar.TabViewitem>%20
@風(fēng)格/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
有一些圖片,選擇器我沒有發(fā)布,你可以下載代碼看效果,改變樣式運行效果
%20
好的,今天的解釋在這里結(jié)束了。如果您有任何疑問,請在下面留言。如果您有興趣,可以查看開源框架ViewPageIndicator和ViewPager模仿網(wǎng)易新聞客戶端Tab標(biāo)簽
源代碼下載,請點擊
許多朋友說他們對如何設(shè)置4.1的風(fēng)格沒有影響。首先,這個庫在2.X機器上使用ActionBar。在3.0之后,它使用了Andriod附帶的ActionBar,因此3.0系統(tǒng)中使用的樣式是android。樣式,所以我們必須修改樣式文件如下
[html]查看plaincopyprint?
@ nullitem>
@ nullitem>
45dipitem>
45dipitem>
@風(fēng)格/Widget.Sherlock.ActionBar.TabTextitem>
@風(fēng)格/Widget.Sherlock.ActionBar.TabTextitem>
@風(fēng)格/Widget.Sherlock.ActionBar.TabViewitem>
@風(fēng)格/Widget.Sherlock.ActionBar.TabViewitem>
@風(fēng)格/Widget.Slider.ActionBaritem>
@風(fēng)格/Widget.Slider.ActionBaritem>
樣式和GT;
@繪制/base_action_bar_bgitem>
@繪制/base_action_bar_bgitem>
樣式和GT;
@繪制/selector_tabtextitem>
15spitem>
樣式和GT;
@繪制/tab_indicatoritem>
8dipitem>
8dipitem>
樣式和GT;
標(biāo)簽:& nbsp& nbsp沈陽app開發(fā)&營銷類型網(wǎng)站建設(shè)& nbsp沈陽App Design& ActionBarSherlock框架網(wǎng)站建設(shè),小程序開發(fā),小程序制作,微信小程序開發(fā),公眾號開發(fā),微信公眾號開發(fā),網(wǎng)頁設(shè)計,網(wǎng)站優(yōu)化,網(wǎng)站排名,網(wǎng)站設(shè)計,微信小程序設(shè)計,小程序定制,微信小程序定制