2015-11-02 242 views
0

如何添加與操作欄內嵌的選項卡(與設置按鈕位於同一行的選項卡)?Android工具欄選項卡導航

Google's DeskClock Implementation

我相信他們這個使用甚至在棉花糖發佈分支不贊成的方法實現:

mActionBar.setDisplayOptions(0); 
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

他們風格:

<style name="DeskClock" parent="@style/BaseActivityTheme"> 
     <item name="android:windowActionBarOverlay">true</item> 
     <item name="android:windowBackground">@color/default_background</item> 
     <!-- Attributes from support.v7.appcompat --> 
     <item name="actionBarStyle">@style/DeskClockActionBarStyle</item> 
     <item name="actionBarTabStyle">@style/DeskClockTabStyle</item> 
     <item name="actionBarTabBarStyle">@style/DeskClockTabBarStyle</item> 
    </style> 
    <style name="DeskClockTabBaseStyle" parent="Widget.AppCompat.ActionBar.TabView"> 
     <item name="android:paddingLeft">@dimen/actionbar_tab_padding</item> 
     <item name="android:paddingRight">@dimen/actionbar_tab_padding</item> 
     <item name="android:gravity">center</item> 
    </style> 
    <style name="DeskClockTabStyle" parent="DeskClockTabBaseStyle"> 
     <item name="android:background">?attr/selectableItemBackgroundBorderless</item> 
    </style> 
    <style name="DeskClockTabBarStyle" parent="Widget.AppCompat.ActionBar.TabBar"> 
     <item name="android:dividerPadding">12dp</item> 
     <item name="android:gravity">center</item> 
     <!-- Attributes from support.v7.appcompat --> 
     <item name="showDividers">none</item> 
    </style> 
    <style name="DeskClockActionBarStyle" parent="Widget.AppCompat.ActionBar"> 
     <item name="android:background">@null</item> 
     <item name="android:backgroundStacked">@null</item> 
     <item name="android:backgroundSplit">@null</item> 
     <!--suppress CheckTagEmptyBody Empty displayOptions to hide app title at launch. --> 
     <item name="displayOptions"></item> 
    </style> 

編輯:

我仍然沒有達到同樣的效果。

My attempt looks like

風格:

<style name="Theme" parent="@style/AppTheme"> 
     <item name="android:windowActionBarOverlay">true</item> 

     <!-- Attributes from support.v7.appcompat --> 
     <item name="actionBarStyle">@style/DeskClockActionBarStyle</item> 
     <item name="actionBarTabStyle">@style/DeskClockTabStyle</item> 
     <item name="actionBarTabBarStyle">@style/DeskClockTabBarStyle</item> 
    </style> 

    <style name="DeskClockTabBaseStyle" parent="Widget.AppCompat.ActionBar.TabView"> 
     <item name="android:paddingLeft">@dimen/actionbar_tab_padding</item> 
     <item name="android:paddingRight">@dimen/actionbar_tab_padding</item> 
     <item name="android:gravity">center</item> 
    </style> 

    <style name="DeskClockTabStyle" parent="DeskClockTabBaseStyle"> 
     <item name="android:background">?attr/selectableItemBackgroundBorderless</item> 
    </style> 

    <style name="DeskClockTabBarStyle" parent="Widget.AppCompat.ActionBar.TabBar"> 
     <item name="android:dividerPadding">12dp</item> 
     <item name="android:gravity">center</item> 
     <!-- Attributes from support.v7.appcompat --> 
     <item name="showDividers">none</item> 
    </style> 

    <style name="DeskClockActionBarStyle" parent="Widget.AppCompat.ActionBar"> 
     <item name="android:background">@null</item> 
     <item name="android:backgroundStacked">@null</item> 
     <item name="android:backgroundSplit">@null</item> 
     <!--suppress CheckTagEmptyBody Empty displayOptions to hide app title at launch. --> 
     <item name="displayOptions"></item> 
    </style> 

MainActivity:

ActionBar mActionBar = getSupportActionBar(); 
    mActionBar.setDisplayOptions(0); 
    mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    // Add 3 tabs, specifying the tab's text and TabListener 
    for (int i = 0; i < NUM_PAGES; i++) { 
     mActionBar.addTab(
       mActionBar.newTab() 
         .setText("Tab " + (i + 1)) 
         .setTabListener(tabListener)); 
    } 

回答

0

要在工具欄上創建內嵌選項卡,必須爲其創建自定義視圖。

actionbar_layout.xml(特別注意的android:layout_gravity = 「fill_horizo​​ntal」)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    style="?attr/actionButtonStyle" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="fill_horizontal"> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tab_layout_main" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</RelativeLayout> 
您的活動

然後

actionBar.setDisplayShowCustomEnabled(true); 
actionBar.setDisplayShowTitleEnabled(false); 
1

如果你的作品:

您可以使用PagerSlidingStrip

刪除默認的actionBar並自定義您的內容的slidingtabstrip,並從XML添加設置按鈕並在打開時膨脹菜單。

我相信這是可以實現的,儘管我從未在這種情況下使用它。

+0

我怎麼會在XML中添加的設置按鈕?沒有刪除默認的操作欄沒有辦法做到這一點? 我還包括谷歌的造型。這有幫助嗎?如果需要,我甚至可以使用已棄用的方法。 –

+0

我沒有真正使用默認的actionBar,我覺得很難在當前的API中進行自定義。目前,自定義actionBar幾乎總是最好的解決方案。您可以將按鈕添加到XML中,並將onClickListener設置爲該按鈕,然後在按鈕正下方充填一個對話框。 –