2013-08-20 97 views
1

我正在爲Android 4.3開發,並且我的代碼出現問題,我似乎無法弄清楚。我一直在尋找答案,所有我能找到的都是那些想要我目前情況的人,而我想要他們的竊聽程序。操作欄下方的標籤

我有3個標籤,我已經放在操作欄的Android的教程在ActionBar標籤。

什麼是應該發生: 選項卡應該出現在動作條

上,而不是會發生什麼: 該選項卡顯示在操作欄下方

我的問題是:
1.如何設置這些選項卡以顯示在ActionBar上,而不是低於
2.如果成功1,如何設置選項卡的大小?例如使3個標籤一起採取在ActionBar的三分之一(由寬度)

我的代碼:

mPager = (ViewPager)findViewById(R.id.pager); 
     mPager.setAdapter(mAdapter); 

     final ActionBar actionBar = getActionBar(); 
     actionBar.show(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     ActionBar.TabListener tabListener = new ActionBar.TabListener() { 
      public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { 
       // show the given tab 
       mPager.setCurrentItem(tab.getPosition()); 
      } 

      public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { 
       // hide the given tab 
      } 

      public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { 
       // probably ignore this event 
      } 
     }; 

     mPager.setOnPageChangeListener(
       new ViewPager.SimpleOnPageChangeListener() { 
        @Override 
        public void onPageSelected(int position) { 
         // When swiping between pages, select the 
         // corresponding tab. 
         actionBar.setSelectedNavigationItem(position); 
        } 
       }); 
     // Add 3 tabs, specifying the tab's text and TabListener 
     actionBar.addTab(
        actionBar.newTab() 
          .setText("A") 
          .setTabListener(tabListener)); 
     actionBar.addTab(
       actionBar.newTab() 
         .setText("B") 
         .setTabListener(tabListener)); 
     actionBar.addTab(
       actionBar.newTab() 
         .setText("C") 
         .setTabListener(tabListener)); 
+0

你在平板電腦或手機測試?在較小的屏幕上,ActionBar標籤顯示在ActionBar下面。看看圖7&8在這裏:http://developer.android.com/guide/topics/ui/actionbar.html#Tabs – blackcj

+0

我在手機上測試,當我旋轉我的設備的標籤顯示在AcitonBar。我希望這總是發生。 – user2558461

回答

1
private ViewPager mPager; 
private PagerAdapter mPagerAdapter; 
private static final int NUM_PAGES = 3; 
中的onCreate()

final ActionBar actionBar = getActionBar(); 
    actionBar.setDisplayHomeAsUpEnabled(true); 

    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    mPager = (ViewPager) findViewById(R.id.pager); 
    mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); 
    mPager.setAdapter(mPagerAdapter); 
    mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      actionBar.setSelectedNavigationItem(position); 
     } 
    }); 

    ActionBar.TabListener tabListener = new ActionBar.TabListener() { 

     @Override 
     public void onTabReselected(Tab tab, 
       android.app.FragmentTransaction ft) { 

     } 

     @Override 
     public void onTabSelected(Tab tab, 
       android.app.FragmentTransaction ft) { 
      mPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(Tab tab, 
       android.app.FragmentTransaction ft) { 
     } 

    }; 

    for (int i = 0; i < mPagerAdapter.getCount(); i++) { 
     actionBar.addTab(actionBar 
       .newTab() 
       .setText(mPagerAdapter.getPageTitle(i)) 
       .setIcon(
         ((ScreenSlidePagerAdapter) mPagerAdapter) 
           .getPageIcon(i)) 
       .setTabListener(tabListener)); 
    } 

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
    public ScreenSlidePagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
     case 0: 
      return Fragment.instantiate(MainActivity.this, 
        Fragment_sports.class.getName()); 
     case 1: 
      return Fragment.instantiate(MainActivity.this, 
        Fragment_casino.class.getName()); 
     case 2: 
      return Fragment.instantiate(MainActivity.this, 
        Fragment_live_betting.class.getName()); 
     default: 
      break; 
     } 
     return null; 
    } 

    @Override 
    public int getCount() { 
     return NUM_PAGES; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     String tabLabel = null; 
     switch (position) { 
     case 0: 
      tabLabel = " Sports"; 
      break; 
     case 1: 
      tabLabel = "Casino"; 
      break; 
     case 2: 
      tabLabel = "Live Betting"; 
      break; 
     } 

     return tabLabel; 
    } 

    public int getPageIcon(int position) { 
     int id = 0; 
     switch (position) { 
     case 0: 
      id = R.drawable.icon_all_sports_d; 
      break; 
     case 1: 
      id = R.drawable.icon_favourites_d; 
      break; 
     case 2: 
      id = R.drawable.icon_live_d; 
      break; 
     default: 
      break; 
     } 
     return id; 

    } 
} 

和你main_activity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</RelativeLayout> 

地址:

此時應更換THI s的線路:

actionBar.setDisplayHomeAsUpEnabled(true); 

這樣:

actionBar.setDisplayShowHomeEnabled(false); 
actionBar.setDisplayShowTitleEnabled(false); 
+0

爲什麼要將這些標籤放在ActionBar中?我做錯了什麼?我們有相同的代碼(幾乎) – user2558461

+0

查看我的代碼 – WOLVERINE

+0

的更改工作!他們在ActionBar中。我的第二個問題呢?我如何讓他們每個選項卡只有ActionBar的第九個? (全部拿第三)還是用dp或者其他什麼設置? – user2558461

0

編輯:對於標籤,使用API​​導軌this一部分。

對於將元素添加到您的ActionBar,必須重寫onCreateOptionsMenu()

例如:

@Override 

public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu items for use in the action bar 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main_activity_actions, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

而且你也應該有這些項目的佈局一個xml:

RES /菜單/ main_activity_actions.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/action_search" 
     android:icon="@drawable/ic_action_search" 
     android:title="@string/action_search"/> 
    <item android:id="@+id/action_compose" 
     android:icon="@drawable/ic_action_compose" 
     android:title="@string/action_compose" /> 
</menu> 

Source

+0

我希望ActionBar只填充這些選項卡(A,B,C),但我不希望每個選取ActionBar的三分之一 - >將整個ActionBar空間導致它顯示另一行。我希望所有選項卡的整個寬度佔用ActionBar的三分之一 – user2558461

+0

請嘗試我在我的編輯中發佈的鏈接。 –