ActionBar导航标签是否可以在手机和平板电脑上显示相同的内容?
请参阅下面的手机和平板电脑图片:
PHONE:
片剂:
Android documentation声明“......当屏幕足够宽时,标签会显示在操作栏旁边的动作按钮......”。 我们不希望它们出现在ActionBar中。任何解决方案?
答案 0 :(得分:6)
ActionBar
标签由ScrollingTabContainerView
创建。 ActionBarView
,View
的实际ActionBar
包含一个方法ActionBarView.setEmbeddedTabView
,该方法基本上负责在{{1}下方或嵌入{{1} }。
当ActionBar
为initialized in Activity
时,它使用ActionBarPolicy
根据ActionBar
定义为true
in the system's resources的值来确定何时使用嵌入的标签页,但是false
in portrait mode。因此,在此初始化ActionBarImpl.setHasEmbeddedTabs
被调用以确定标签的放置位置。而且,正如文档所述:
...当屏幕足够宽时,标签会显示在操作栏中 与动作按钮一起
那么如何阻止它嵌入标签?
好像你在这里有两个选择,其中一个明显,至少对我而言,比另一个更好。
您可以使用反射来调用boolean
并将其设置为始终为ActionBarImpl.setHasEmbeddedTabs
。您需要使用反射,因为false
是内部类,并且没有公共ActionBarImpl
方法来指示何时嵌入标签。
您可以停止使用ActionBar
API并切换到替代方案like Google's SlidingTabLayout
。这个要求你使用ActionBar.Tab
,这在使用标签时通常是一个很好的加分,你甚至可能已经在使用它。
以下是两个例子:
使用反射
ViewPager
反思结果
从固定标签切换到可滚动标签
要使用Google的@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActionBar actionBar = getActionBar();
// Implement your tabs
...
try {
final Class<?> clazz = actionBar.getClass();
final Method embedTabs = clazz.getDeclaredMethod("setHasEmbeddedTabs", boolean.class);
embedTabs.invoke(actionBar, false);
} catch (final Exception ignored) {
// Nothing to do
}
}
,您需要将两个类复制到项目中。您需要的课程是:
实现SlidingTabLayout
的示例布局如下所示:
SlidingTabLayout
使用<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<your_path_to.SlidingTabLayout
android:id="@+id/slidingTabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
对布局进行充气并初始化SlidingTabLayout
后,请致电View.findViewById
将SlidingTabLayout.setViewPager
绑定到标签页。
Check out Google's example for a full project
可滚动标签结果
可滚动标签用于Google的多个应用中,例如Play商店和Play音乐。如果你不熟悉,可以用一段简短的视频来展示它们,check out the Android design docs on tabs。
<强>结论强>
简而言之,如果您不希望嵌入它们,我建议使用可滚动选项卡而不是固定选项卡(至少在横向模式下)。