在横向模式下在Android工具栏中显示标签

时间:2016-02-26 07:07:31

标签: android user-interface android-toolbar android-tablayout

我正在将我的应用程序从ActionBarSherlock迁移到使用AppCompat库和内置于Android L / M中的类似UI。

但在移植以下内容时我遇到了一个基本问题:

使用ActionbarSherlock:

我在活动上有标签导航。在纵向中,选项卡显示在应用程序的主工具栏/操作栏下方,当转向横向时,选项卡会自动工具栏中。这非常方便,因为否则工具栏/操作栏的右侧将只是空的浪费空间(我在工具栏的右侧只有一个菜单)。

在底部添加ActionbarSherlock添加应用的屏幕截图。

对于ActionBarSherlock,我所要做的就是将我的MainActivity声明为

public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener

然后将以下代码添加到onCreate(...)

getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
for (int ch = 0; ch < MAX_NUM_CHANNELS; ch++)       // Number of tabs
{
    ActionBar.Tab tab = getSupportActionBar().newTab();
    m_tabImageViews[ch] = new ImageView(this);
    m_tabImageViews[ch].setPadding(0, 10, 0, 10);
    m_tabImageViews[ch].setImageResource(m_chIcons[ch]);
    tab.setCustomView(m_tabImageViews[ch]);
    Integer k = ch;
    tab.setTag(k);
    tab.setTabListener(this);
    getSupportActionBar().addTab(tab);
}

最后,实现以下函数来处理选项卡选择:

@Override
public void onTabSelected(Tab tab, FragmentTransaction transaction)
{
    ...
}

使用AppCompat库:

我正在考虑使用Google提供的ActionBar类,认为它与ActiobarSherlock的行为非常相似,但不得不放弃这个想法,因为Google表示他们已弃用它。

所以唯一的选择是使用Toolbar和TabLayout与PagerAdapter。这在纵向方向上工作正常,但在横向方向上,我现在被迫在工具栏下方 标签,从而浪费屏幕上的空间(工具栏的右侧是空的)。

如何在工具栏中显示标签(内联)?我查看了以下示例,但它们都有同样的问题:

  1. SlidingTabsBasic
  2. SlidingTabsColors
  3. 很少有人
  4. 非常感谢任何指示...

    更新

    我尝试使用ActionBar。它工作得很好,正是我想要的,但我担心谷歌会随时拔掉这个类的插件(已经弃用)。所以我想转移到支持的UI元素。因此问题......提前感谢您的帮助。

    1. Potrait
    2. Landscape

2 个答案:

答案 0 :(得分:2)

要使标签显示在工具栏中,您需要将<TabLayout>标记放在<Toolbar>标签中。

  1. 使用工具栏内的标签进行布局(所需的横向效果)
  2. <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">     
    
      <android.support.v7.widget.Toolbar
          android:id="@+id/toolbar"
          android:layout_width="match_parent"
          android:layout_height="?attr/actionBarSize"
          android:background="?attr/colorPrimary"
          app:layout_scrollFlags="scroll|enterAlways"
          app:popupTheme="@style/ThemeOverlay.AppCompat.Light" >
    
          <android.support.design.widget.TabLayout
              android:id="@+id/tabs"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              app:tabMode="fixed"
              app:tabGravity="fill"/>
    
      </android.support.v7.widget.Toolbar>
    
    </android.support.design.widget.AppBarLayout>
    
    1. 使用工具栏外部的标签进行布局(通常以纵向显示)
    2. <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
      
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" >
        </android.support.v7.widget.Toolbar>
      
        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMode="fixed"
            app:tabGravity="fill"/>
      
      </android.support.design.widget.AppBarLayout>
      

      你可以有一个xml用于纵向模式(在layout文件夹中),另一个用于横向模式(在layout-land文件夹中)

答案 1 :(得分:0)

经过大量的实验,我发现没有什么能与ActionBar相提并论。因此,即使它被弃用,我最终也使用了ActionBar。它现在工作正常。我将继续寻找任何其他解决方案,如果找到的话,我会在这里发布。