Android 4+操作栏标签显示首次启动时的下拉列表 - 要防止?

时间:2015-10-09 13:05:19

标签: java android tabs android-actionbar

我正在使用Android 4+应用,该应用使用ActionBar标签来导航android.support.v4.view.ViewPager。这种方法很好,除非在安装后第一次启动应用程序。在这种情况下,选项卡将显示为下拉列表。

这是MainActivity的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>  

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"        
        style="@style/NavigationDrawerListView" />

    <ListView
        android:id="@+id/right_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="end"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        style="@style/ShortcutsListView" />
</android.support.v4.widget.DrawerLayout>

使用init代码MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
    ...

    // TabBar
    sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    viewPager = (ViewPager)findViewById(R.id.pager);
    viewPager.setAdapter(sectionsPagerAdapter);

    currentPageIndex = (savedInstanceState != null ? savedInstanceState.getInt(CURRENT_PAGE_INDEX_KEY, -1) : -1 );
    viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            getActionBar().setSelectedNavigationItem(position);             
            updateCurrentPageIndex(position);
        }
    });

    // ActionBar
    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setHomeButtonEnabled(true);

    ActionBar.TabListener tabListener = new ActionBar.TabListener() {
        public void onTabSelected(Tab tab, android.app.FragmentTransaction arg1) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        public void onTabReselected(Tab arg0, android.app.FragmentTransaction arg1) { }
        public void onTabUnselected(Tab arg0, android.app.FragmentTransaction arg1) { }
    };

    actionBar.addTab(actionBar.newTab()
            .setText(R.string.MainPageTitle)
            .setTabListener(tabListener));
    actionBar.addTab(actionBar.newTab()
            .setText(R.string.ContactsPageTitle)
            .setTabListener(tabListener));
    actionBar.addTab(actionBar.newTab()
            .setText(R.string.SettingsPageTitle)
            .setTabListener(tabListener));
    actionBar.addTab(actionBar.newTab()
            .setText(R.string.MessagePageTitle)
            .setTabListener(tabListener));


    // http://stackoverflow.com/questions/14672984/
    // Set NavigationMode AFTER alle tabs have been added
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ...
}

据我所知,第一次发射确实是唯一的区别。但我不知道这会如何影响标签。

任何想法如何总是使用标签而永远不会下拉列表?

2 个答案:

答案 0 :(得分:1)

  

任何想法如何总是使用标签而永远不会下拉列表?

首先,一年前不推荐使用操作栏标签。

其次,you have never had control whether action bar tabs show up as tabs versus a drop-down list

我建议您使用其他一些标签解决方案,无论是SDK的设计支持库中的TabLayoutthird-party tabs associated with a ViewPagerFragmentTabHost等等。

答案 1 :(得分:0)

使用此项目而非标准。

https://github.com/astuetz/PagerSlidingTabStrip