【问题标题】:Android Toolbar Tab NavigationAndroid 工具栏标签导航
【发布时间】:2015-11-02 08:45:15
【问题描述】:

如何在操作栏内添加标签(标签与设置按钮位于同一行)?

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>

主活动:

    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));
    }

【问题讨论】:

    标签: android toolbar android-tabs android-toolbar


    【解决方案1】:

    如果它适合你:

    您可以使用PagerSlidingStrip

    删除默认的actionBar并根据您的内容自定义您的slidingtabstrip,并从XML添加设置按钮并在打开时膨胀菜单。

    我相信这是可以实现的,尽管我从未在这种情况下使用过。

    【讨论】:

    • 如何在 XML 中添加设置按钮?如果不删除默认操作栏,就没有办法做到这一点?我还包括了 Google 的样式。这有帮助吗?如果需要,我什至可以使用已弃用的方法。
    • 我并没有真正使用默认的actionBar,我发现在当前的API中很难自定义。目前,自定义 actionBar 几乎总是最好的解决方案。您可以在 XML 中添加按钮并为该按钮设置一个 onClickListener,然后在按钮下方膨胀一个对话框。
    【解决方案2】:

    要在工具栏上创建内嵌选项卡,您必须为其创建自定义视图。

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多