• <kbd id="qyk40"></kbd>
  • <strike id="qyk40"></strike><samp id="qyk40"><pre id="qyk40"></pre></samp>

    大家都知道 Android的ActionBar是在3.0以上才有的,那么在3.0以下呢,google并沒有給我提供在3.0以下支持ActionBar的包,但 是外國的大牛JakeWharton實現(xiàn)了在3.0以下使用ActionBar, JakeWharton這位大牛是 ActionBarSherlock,Android-ViewPagerIndicator ,NineOldAndroids的作者,非常厲害的一個人,Github的關(guān)注量超過2.6K,我左側(cè)的友情鏈接里面有他的Github的主頁鏈接,有 興趣的朋友可以去follow下他,今天我們使用的是他的開源框架ActionBarSherlock,ActionBarSherlock是讓 Action Bar功能支持2.X后的所有平臺,而且他會自動的判斷是調(diào)用原生Action Bar還是使用擴展ActionBar,很多知名的應(yīng)用也使用這個庫,我之前對ActionBar也不了解,所以就去下了 ActionBarSherlock來好好的了解了解ActionBar的使用

    把紅色框框標(biāo)記的文件導(dǎo)入Eclipse里面,我們可以先看下例子,來了解下ActionBar的一些使用情況

    • 我們新建一個Android工程,叫ViewPagerAndTab,然后指定ActionBarSherlock為ViewPagerAndTab的庫工程,右鍵工程--->Properties

    通過上面的幾步我們就指定ActionBarSherlock為ViewPagerAndTab的庫工程,接下來我們就能在3.0以下使用ActionBar,我這里使用的是ActionBar  Tab和ViewPager仿網(wǎng)易新聞,我們看看主要代碼的編寫

    1.先看布局文件,里面一個ViewPager,非常簡單

    [html] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片

    1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  

    2.     xmlns:tools="http://schemas.android.com/tools"  

    3.     android:layout_width="match_parent"  

    4.     android:layout_height="match_parent"  

    5.     android:background="@android:color/white">  

    6.       

    7.     <android.support.v4.view.ViewPager      

    8.         android:id="@+id/viewPager"      

    9.         android:layout_width="fill_parent"      

    10.         android:layout_height="wrap_content" />     

    11.   

    12. RelativeLayout>  

    2.MainActivity代碼,點擊ActionBar的Tab,ViewPager切換不同的Fragment,滑動ViewPager,選中相對應(yīng)的ActiionBar Tab

    [java] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片

    1. package com.example.viewpagerandtabdemo;  

    2.   

    3. import java.util.ArrayList;  

    4. import java.util.List;  

    5.   

    6. import android.os.Bundle;  

    7. import android.support.v4.app.Fragment;  

    8. import android.support.v4.app.FragmentTransaction;  

    9. import android.support.v4.view.ViewPager;  

    10. import android.support.v4.view.ViewPager.OnPageChangeListener;  

    11.   

    12. import com.actionbarsherlock.app.ActionBar;  

    13. import com.actionbarsherlock.app.ActionBar.Tab;  

    14. import com.actionbarsherlock.app.SherlockFragmentActivity;  

    15.   

    16. public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener, OnPageChangeListener{  

    17.     /**

    18.      * 頂部Tab的title

    19.      */  

    20.     private String [] mTabTitles;  

    21.       

    22.     /**

    23.      * ViewPager對象的引用

    24.      */  

    25.     private ViewPager mViewPager;  

    26.       

    27.     /**

    28.      * 裝載Fragment的容器,我們的每一個界面都是一個Fragment

    29.      */  

    30.     private List mFragmentList;  

    31.       

    32.     /**

    33.      * ActionBar對象的引用

    34.      */  

    35.     private ActionBar mActionBar;  

    36.   

    37.     @Override  

    38.     protected void onCreate(Bundle savedInstanceState) {  

    39.         super.onCreate(savedInstanceState);  

    40.         setContentView(R.layout.activity_main);  

    41.           

    42.         //從資源文件在獲取Tab的title  

    43.         mTabTitles = getResources().getStringArray(R.array.tab_title);  

    44.         mFragmentList =  new ArrayList();  

    45.           

    46.         mViewPager = (ViewPager) findViewById(R.id.viewPager);  

    47.         //設(shè)置Adapter  

    48.         mViewPager.setAdapter(new TabPagerAdapter(getSupportFragmentManager(), mFragmentList));  

    49.         //設(shè)置監(jiān)聽  

    50.         mViewPager.setOnPageChangeListener(this);  

    51.           

    52.           

    53.         //獲取Action實例我們使用getSupportActionBar()方法  

    54.         mActionBar = getSupportActionBar();  

    55.           

    56.         //隱藏Title  

    57.         mActionBar.setDisplayShowTitleEnabled(false);  

    58.         //隱藏Home logo  

    59.         mActionBar.setDisplayShowHomeEnabled(false);  

    60.         //設(shè)置ActionBar的導(dǎo)航模式為Tab  

    61.         mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  

    62.           

    63.           

    64.         //為ActionBar添加Tab并設(shè)置TabListener  

    65.         for(int i=0; i

    66.              ActionBar.Tab tab = mActionBar.newTab();  

    67.              tab.setText(mTabTitles[i]);  

    68.              tab.setTabListener(this);  

    69.              mActionBar.addTab(tab, i);  

    70.         }  

    71.           

    72.           

    73.         //將Fragment加入到List中,并將Tab的title傳遞給Fragment  

    74.         for(int i=0; i

    75.             Fragment fragment = new ItemFragment();  

    76.             Bundle args = new Bundle();  

    77.             args.putString("arg", mTabTitles[i]);  

    78.             fragment.setArguments(args);  

    79.               

    80.             mFragmentList.add(fragment);  

    81.         }  

    82.           

    83.     }  

    84.       

    85.       

    86.   

    87.     @Override  

    88.     public void onTabSelected(Tab tab, FragmentTransaction ft) {  

    89.         //點擊ActionBar Tab的時候切換不同的Fragment界面  

    90.         mViewPager.setCurrentItem(tab.getPosition());  

    91.     }  

    92.   

    93.     @Override  

    94.     public void onTabUnselected(Tab tab, FragmentTransaction ft) {  

    95.   

    96.     }  

    97.   

    98.     @Override  

    99.     public void onTabReselected(Tab tab, FragmentTransaction ft) {  

    100.           

    101.     }  

    102.       

    103.       

    104.     @Override  

    105.     public void onPageScrollStateChanged(int arg0) {  

    106.           

    107.     }  

    108.   

    109.     @Override  

    110.     public void onPageScrolled(int arg0, float arg1, int arg2) {  

    111.           

    112.     }  

    113.   

    114.     @Override  

    115.     public void onPageSelected(int arg0) {  

    116.         //滑動ViewPager的時候設(shè)置相對應(yīng)的ActionBar Tab被選中  

    117.         mActionBar.setSelectedNavigationItem(arg0);  

    118.     }  

    119.   

    120.   

    121. }  

    我 們使用ActionBarSherlock的時候不再是繼承Activity,而是繼承 SherlockActivity,SherlockDialogFragment,SherlockFragmentActivity等等,我這里用到 Fragment,所以繼承SherlockFragmentActivity,我們不能隨便設(shè)置Activity的theme,以后我們要全屏顯示的時 候直接設(shè)置android:theme="@android:style/Theme.Black.NoTitleBar", 我們使用ActionBar就不能這樣設(shè)置了,并且不能隨便設(shè)置他的Theme,必須是Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar,或者是他們的子樣式,不然就會出 java.lang.IllegalStateException異常,所以為了自定義ActionBar的Tab,我們必須修改其style

    注意:我們還必須刪除ViewPagerAndTab工程libs下面的android-support-v4.jar包,因為在ActionBarSherlock已經(jīng)包含android-support-v4.jar

     

    3.ViewPager的適配器TabPagerAdapter,因為我們用到Fragment,所以我們繼承FragmentStatePagerAdapter而不是PagerAdapter

    [java] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片

    1. package com.example.viewpagerandtabdemo;  

    2.   

    3. import java.util.List;  

    4.   

    5. import android.support.v4.app.Fragment;  

    6. import android.support.v4.app.FragmentManager;  

    7. import android.support.v4.app.FragmentStatePagerAdapter;  

    8.   

    9. public class TabPagerAdapter extends FragmentStatePagerAdapter {  

    10.     private List list;  

    11.       

    12.     //構(gòu)造函數(shù)  

    13.     public TabPagerAdapter(FragmentManager fm, List list) {  

    14.         super(fm);  

    15.         this.list = list;  

    16.     }  

    17.   

    18.     @Override  

    19.     public Fragment getItem(int arg0) {  

    20.         return list.get(arg0);  

    21.     }  

    22.   

    23.     @Override  

    24.     public int getCount() {  

    25.         return list.size();  

    26.     }  

    27.   

    28. }  

     

    4.ItemFragment 繼承SherlockFragment,也可以直接繼承Fragment,里面的的布局比較簡單,一個TextView用來顯示從Activity傳遞過來的ActionBar Tab的title

    [java] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片

    1. package com.example.viewpagerandtabdemo;  

    2.   

    3. import android.os.Bundle;  

    4. import android.view.LayoutInflater;  

    5. import android.view.View;  

    6. import android.view.ViewGroup;  

    7. import android.widget.TextView;  

    8.   

    9. import com.actionbarsherlock.app.SherlockFragment;  

    10.   

    11.   

    12. public class ItemFragment extends SherlockFragment {  

    13.   

    14.     @Override  

    15.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  

    16.             Bundle savedInstanceState) {  

    17.           

    18.         View contextView = inflater.inflate(R.layout.fragment_item, container, false);  

    19.         TextView mTextView = (TextView) contextView.findViewById(R.id.textview);  

    20.           

    21.         //獲取Activity傳遞過來的參數(shù)  

    22.         Bundle mBundle = getArguments();  

    23.         String title = mBundle.getString("arg");  

    24.           

    25.         mTextView.setText(title);  

    26.           

    27.         return contextView;  

    28.     }  

    29.   

    30.     @Override  

    31.     public void onActivityCreated(Bundle savedInstanceState) {  

    32.         super.onActivityCreated(savedInstanceState);  

    33.     }  

    34.   

    35. }  

    然后我們將上面的Activity的theme設(shè)置成android:theme="@style/Theme.Sherlock.Light.DarkActionBar" 運行項目看看效果,下圖一是項目的效果,圖二是網(wǎng)易的效果

    是不是相差很大呢?人家下面的指示條是紅色的,我們做出來的是藍色的,人家選中Tab的字體顏色是紅色,我們的不變色等等,那么我們要怎么才能做出網(wǎng)易新聞的那樣子的效果,我們需要改變其style,改變?nèi)缦?/span>

    [html] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片

    1. <style name="Themes.ActionBarTab" parent="@style/Theme.Sherlock">  

    2.       

    3.     <item name="actionBarDivider">@nullitem>  

    4.       

    5.       

    6.     <item name="actionBarSize">45dipitem>  

    7.       

    8.       

    9.     <item name="actionBarTabTextStyle">@style/Widget.Sherlock.ActionBar.TabTextitem>  

    10.       

    11.       

    12.     <item name="actionBarTabStyle">@style/Widget.Sherlock.ActionBar.TabViewitem>  

    13.       

    14.       

    15.     <item name="actionBarStyle">@style/Widget.Slider.ActionBaritem>  

    16. style>  

    17.   

    18.   

    19.  <style name="Widget.Slider.ActionBar" parent="@style/Widget.Sherlock.ActionBar">    

    20.     <item name="backgroundStacked">@drawable/base_action_bar_bgitem>  

    21. style>  

    22.   

    23. <style name="Widget.Sherlock.ActionBar.TabText" parent="android:Widget.Holo.ActionBar.TabText">  

    24.     <item name="android:textColor">@drawable/selector_tabtextitem>  

    25.     <item name="android:textSize">15spitem>  

    26. style>  

    27.   

    28. <style name="Widget.Sherlock.ActionBar.TabView" parent="Widget">  

    29.     <item name="android:background">@drawable/tab_indicatoritem>  

    30.     <item name="android:paddingLeft">8dipitem>  

    31.     <item name="android:paddingRight">8dipitem>  

    32. style>   

    還有一些圖片,selector我沒有貼出來,可以去下載代碼看看效果,改變style運行效果

     

    好了,今天的講解到此結(jié)束,有疑問的朋友請在下面留言,有興趣的可以看看 開源框架ViewPageIndicator 和 ViewPager 仿網(wǎng)易新聞客戶端Tab標(biāo)簽

     源碼下載,請點擊

    很 多朋友說自己在4.1上面怎么設(shè)置style沒效果,首先這個庫是在2.X的機器上面使用ActionBar,3.0以后就是使用Andriod自帶的 ActionBar,所以在3.0以上的系統(tǒng)使用的style為android自帶的style,所以我們要將style文件做下修改,如下

    [html] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片

    1.   <style name="Themes.ActionBarTab" parent="@style/Theme.Sherlock">  

    2.         

    3.       <item name="actionBarDivider">@nullitem>  

    4. <item name="android:actionBarDivider">@nullitem>  

    5.         

    6.         

    7.       <item name="actionBarSize">45dipitem>  

    8. <item name="android:actionBarSize">45dipitem>  

    9.         

    10.         

    11.       <item name="actionBarTabTextStyle">@style/Widget.Sherlock.ActionBar.TabTextitem>  

    12. <item name="android:actionBarTabTextStyle">@style/Widget.Sherlock.ActionBar.TabTextitem>  

    13.         

    14.         

    15.       <item name="actionBarTabStyle">@style/Widget.Sherlock.ActionBar.TabViewitem>  

    16. <item name="android:actionBarTabStyle">@style/Widget.Sherlock.ActionBar.TabViewitem>  

    17.         

    18.         

    19.       <item name="actionBarStyle">@style/Widget.Slider.ActionBaritem>  

    20. <item name="android:actionBarStyle">@style/Widget.Slider.ActionBaritem>  

    21.   style>  

    22.     

    23.     

    24.    <style name="Widget.Slider.ActionBar" parent="@style/Widget.Sherlock.ActionBar">    

    25.       <item name="backgroundStacked">@drawable/base_action_bar_bgitem>  

    26. <item name="android:backgroundStacked">@drawable/base_action_bar_bgitem>  

    27.   style>  

    28.   

    29.   <style name="Widget.Sherlock.ActionBar.TabText" parent="android:Widget.Holo.ActionBar.TabText">  

    30.       <item name="android:textColor">@drawable/selector_tabtextitem>  

    31.       <item name="android:textSize">15spitem>  

    32.   style>  

    33.   

    34.   <style name="Widget.Sherlock.ActionBar.TabView" parent="Widget">  

    35.       <item name="android:background">@drawable/tab_indicatoritem>  

    36.       <item name="android:paddingLeft">8dipitem>  

    37.       <item name="android:paddingRight">8dipitem>  

    38.   style>   

     

     

     

    穩(wěn)定

    產(chǎn)品高可用性高并發(fā)

    貼心

    項目群及時溝通

    專業(yè)

    產(chǎn)品經(jīng)理1v1支持

    快速

    MVP模式小步快跑

    承諾

    我們選擇聲譽

    堅持

    10年專注高端品質(zhì)開發(fā)
    • 返回頂部
    一本色道久久88综合日韩精品| 精品无码专区亚洲| 99re久久精品国产首页2020| 日韩毛片无码永久免费看| 国产精品乱子乱XXXX| 久久精品视频在线看99| 成人三级精品视频在线观看| 久久精品国产亚洲av高清漫画| 亚洲av无码国产精品夜色午夜| 自拍中文精品无码| 久久免费99精品国产自在现线| 亚洲AⅤ永久无码精品AA| 日韩中文字幕在线播放| 色婷婷色综合激情国产日韩| 国产精品李雅在线观看| 精品韩国亚洲av无码不卡区| 久草热8精品视频在线观看| 思思re热免费精品视频66| 精品无码免费专区毛片| 91在线精品亚洲一区二区| 性色精品视频网站在线观看| 亚洲AV无码精品色午夜果冻不卡| 精品国产自在在线在线观看| 99re热视频这里只精品| 91精品国产综合久久久久久| 久久国产香蕉一区精品| 黑人无码精品又粗又大又长 | 亚洲国产精品日韩在线观看 | 日韩成人在线网站| 亚洲日韩在线第一页| 久久久无码精品亚洲日韩软件| 国产福利专区精品视频| 国产精品国产三级国产av中文| 在线精品自拍亚洲第一区| 日韩亚洲综合精品国产| 国产精品亚洲专区一区| 午夜亚洲国产精品福利| 日韩好片一区二区在线看| 亚洲性色AV日韩在线观看| 国产91在线|日韩| av无码精品一区二区三区四区|