Android 工具栏选项卡导航
Android Toolbar Tab Navigation
您将如何添加与操作栏内联的选项卡(选项卡与设置按钮位于同一行)?
Google's DeskClock Implementation
我相信即使在 marshmallow 发布分支上,他们也使用过时的方法实现了这一点:
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>
编辑:
我还是没有达到同样的效果
风格:
<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));
}
如果它适合你:
您可以使用PagerSlidingStrip
删除默认的 actionBar 并根据您的内容自定义 slidingtabstrip,然后 XML 添加设置按钮并在打开时展开菜单。
我相信这是可以实现的,尽管我从未在这种情况下使用过它。
要在工具栏上创建内联选项卡,您必须为其创建自定义视图。
actionbar_layout.xml(具体注意android:layout_gravity="fill_horizontal")
<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>
然后在你的 activity
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
您将如何添加与操作栏内联的选项卡(选项卡与设置按钮位于同一行)?
Google's DeskClock Implementation
我相信即使在 marshmallow 发布分支上,他们也使用过时的方法实现了这一点:
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>
编辑:
我还是没有达到同样的效果
风格:
<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));
}
如果它适合你:
您可以使用PagerSlidingStrip
删除默认的 actionBar 并根据您的内容自定义 slidingtabstrip,然后 XML 添加设置按钮并在打开时展开菜单。
我相信这是可以实现的,尽管我从未在这种情况下使用过它。
要在工具栏上创建内联选项卡,您必须为其创建自定义视图。
actionbar_layout.xml(具体注意android:layout_gravity="fill_horizontal")
<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>
然后在你的 activity
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);