Android ActionBar导航标签在手机和平​​板电脑中看起来不同

时间:2013-11-20 10:30:29

标签: android android-actionbar

ActionBar导航标签是否可以在手机和平​​板电脑上显示相同的内容?

请参阅下面的手机和平板电脑图片:

PHONE: Phone Image

片剂: Tablet

Android documentation声明“......当屏幕足够宽时,标签会显示在操作栏旁边的动作按钮......”。 我们不希望它们出现在ActionBar中。任何解决方案?

1 个答案:

答案 0 :(得分:6)

ActionBar标签由ScrollingTabContainerView创建。 ActionBarViewView的实际ActionBar包含一个方法ActionBarView.setEmbeddedTabView,该方法基本上负责在{{1}下方或嵌入{{1} }。

ActionBarinitialized in Activity时,它使用ActionBarPolicy根据ActionBar定义为true in the system's resources的值来确定何时使用嵌入的标签页,但是false in portrait mode。因此,在此初始化ActionBarImpl.setHasEmbeddedTabs被调用以确定标签的放置位置。而且,正如文档所述:

  

...当屏幕足够宽时,标签会显示在操作栏中   与动作按钮一起

那么如何阻止它嵌入标签?

好像你在这里有两个选择,其中一个明显,至少对我而言,比另一个更好。

  1. 您可以使用反射来调用boolean并将其设置为始终为ActionBarImpl.setHasEmbeddedTabs。您需要使用反射,因为false是内部类,并且没有公共ActionBarImpl方法来指示何时嵌入标签。

  2. 您可以停止使用ActionBar API并切换到替代方案like Google's SlidingTabLayout。这个要求你使用ActionBar.Tab,这在使用标签时通常是一个很好的加分,你甚至可能已经在使用它。

  3. 以下是两个例子:

    使用反射

    ViewPager

    反思结果

    Example

    从固定标签切换到可滚动标签

    要使用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.findViewByIdSlidingTabLayout.setViewPager绑定到标签页。

    Check out Google's example for a full project

    可滚动标签结果

    可滚动标签用于Google的多个应用中,例如Play商店和Play音乐。如果你不熟悉,可以用一段简短的视频来展示它们,check out the Android design docs on tabs

    <强>结论

    简而言之,如果您不希望嵌入它们,我建议使用可滚动选项卡而不是固定选项卡(至少在横向模式下)。