我正在将我的应用程序从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。这在纵向方向上工作正常,但在横向方向上,我现在被迫在工具栏下方 标签,从而浪费屏幕上的空间(工具栏的右侧是空的)。
如何在工具栏中显示标签(内联)?我查看了以下示例,但它们都有同样的问题:
非常感谢任何指示...
更新
我尝试使用ActionBar。它工作得很好,正是我想要的,但我担心谷歌会随时拔掉这个类的插件(已经弃用)。所以我想转移到支持的UI元素。因此问题......提前感谢您的帮助。
答案 0 :(得分:2)
要使标签显示在工具栏中,您需要将<TabLayout>
标记放在<Toolbar>
标签中。
<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>
<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。它现在工作正常。我将继续寻找任何其他解决方案,如果找到的话,我会在这里发布。