Actionbar items always appear in overflow menu

Gnagy

I am using a MainActivity derived from FragmentActivity with Fragments representing each tab in the ActionBar. From the docs at http://developer.android.com/guide/topics/ui/actionbar.html, I implemented a split ActionBar with tabs on top and the remaining Action Items on the bottom part of the ActionBar. Because each tab's Fragment have their own specific Action Items, a menu representing these Actions is loaded when a Fragment is being called. This works in general. However, the Action Items always appear in the Overflow Menu on the bottom part of the ActionBar, even though there is plenty of space left of it. Actually, no visible item(s) or text take up space.

I am using the support v4 library.

MainActivity

public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
TabNavigatorPagerAdapter tabNavigatorPagerAdapter;
ViewPager viewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Create the adapter that will return a fragment for each of the three primary sections
    // of the app
    tabNavigatorPagerAdapter = new TabNavigatorPagerAdapter(getSupportFragmentManager());

    // Set up the action bar
    final ActionBar actionBar = getActionBar();

    // Specify that the Home/Up button should not be enabled, since there is no hierarchical
    // parent
    actionBar.setHomeButtonEnabled(false);

    //force tabs at top and actions at bottom
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayShowTitleEnabled(false);

    // Specify that we will be displaying tabs in the action bar
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // Set up the ViewPager, attaching the adapter and setting up a listener for when the
    // user swipes between sections
    viewPager = (ViewPager) findViewById(R.id.pager);
    viewPager.setAdapter(tabNavigatorPagerAdapter);
    viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            // When swiping between different app sections, select the corresponding tab
            // We can also use the ActionBar.Tab#select() to do this if we have a reference
            // to the Tab
            actionBar.setSelectedNavigationItem(position);
        }
    });

    // For each of the sections in the app, add a tab to the action bar.

    // Add Calendar activity
    actionBar.addTab(actionBar.newTab().setText(R.string.calendar_activity).setTabListener(this));
    // Add Grocery List activity
    actionBar.addTab(actionBar.newTab().setText(R.string.grocery_list_activity).setTabListener(this));
    // Add Search activity
    actionBar.addTab(actionBar.newTab().setText(R.string.search_activity).setTabListener(this));
}

@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}

@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    // When the given tab is selected, switch to the corresponding page in the ViewPager.
    viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}

public static class TabNavigatorPagerAdapter extends FragmentPagerAdapter {
    public TabNavigatorPagerAdapter(android.support.v4.app.FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        switch (i) {
            case 0:
                // This is the Calendar section of the App
                return new CalendarFragment();
            default:
                // The other sections of the app are dummy placeholders
                Fragment fragment = new DummySectionFragment();
                Bundle args = new Bundle();
                args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, i + 1);
                fragment.setArguments(args);
                return fragment;
        }
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "Section " + (position + 1);
    }
}

// The Calendar fragment
public static class CalendarFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_calendar, container, false);
        Bundle args = getArguments();
        ((TextView)  rootView.findViewById(android.R.id.text1)).setText(R.string.calendar_activity);
        setHasOptionsMenu(true);

        return rootView;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        menu.clear();
        inflater.inflate(R.menu.menu_calendar, menu);
    }
}
}

Manifest

<?xml version="1.0" encoding="utf-8"?>

<uses-sdk android:minSdkVersion="11" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Holo.Light.DarkActionBar">

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:uiOptions="splitActionBarWhenNarrow">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data android:name="android.support.UI_OPTIONS"
            android:value="splitActionBarWhenNarrow"/>
    </activity>
    <activity
        android:name=".CollectionDemoActivity"
        android:label="@string/demo_collection">

    </activity>
</application>

Calendar menu xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myfirstapp="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.kikicorp.myfirstapp.MainActivity">
<item
    android:id="@+id/qwe"
    android:icon="@drawable/ic_launcher"
    myfirstapp:showAsAction="ifRoom"
    android:title="qwe">
</item>
<item
    android:id="@+id/ee"
    android:icon="@drawable/ic_action_edit"
    myfirstapp:showAsAction="ifRoom"
    android:title="edit">
</item>
<item
    android:id="@+id/xx"
    android:icon="@drawable/ic_action_new"
    myfirstapp:showAsAction="ifRoom"
    android:title="new">
</item>
<item
    android:id="@+id/go_crazy"
    android:icon="@drawable/ic_action_search"
    myfirstapp:showAsAction="ifRoom"
    android:title="@string/go_crazy_action">
</item>
</menu>

Result screenshot

enter image description here

CommonsWare

You are using the native action bar, as indicated by the fact that you are inheriting from FragmentActivity, not ActionBarActivity. Hence, myfirstapp:showAsAction will be ignored. Use android:showAsAction for the native action bar.

If you are intending to use appcompat-v7 for the action bar backport, then change your class to inherit from ActionBarActivity, not FragmentActivity.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

ActionBar items appear always in Overflow Menu

From Dev

Items getting added to "overflow menu" instead of the ActionBar

From Dev

actionbar overflow menu items icons padding

From Dev

Menu Items always appears in the overflow menu

From Dev

Menu Items always appears in the overflow menu

From Dev

Testing a Fragment's menu items that should appear in the ActionBar

From Dev

Testing a Fragment's menu items that should appear in the ActionBar

From Dev

Custom ActionBar Overflow Menu

From Dev

Overflow menu is not showing in Actionbar

From Dev

Action bar overflow menu items doesn't appear

From Dev

Display menu items on ActionBar

From Dev

Android actionbar icons always in overflow

From Dev

Android actionbar icons always in overflow

From Dev

Custom actionbar layout with overflow menu

From Dev

Android ActionBar overflow menu style

From Dev

AppCompat overflow menu overlapping actionbar

From Dev

Adding overflow menu in actionbar android

From Dev

Items not showing in the ActionBar with showAsAction=“always”

From Dev

Android ActionBar menu items scrollable

From Dev

Actionbar is showing menu icons as overflow and not individual icons

From Dev

Android overflow menu positioned above actionbar/toolbar?

From Dev

Actionbar's overflow menu open/close listener

From Dev

Action buttons move to overflow menu (ActionBar)

From Dev

Why is my overflow dropdown menu on top of the actionbar?

From Dev

Detect click on Actionbar's Overflow menu button

From Dev

How to style android actionbar overflow menu

From Dev

ActionBar overflow menu with three dots is not showing

From Dev

Actionbar's overflow menu open/close listener

From Dev

How to style android actionbar overflow menu

Related Related

HotTag

Archive