我正在使用从FragmentActivity派生的MainActivity,其中Fragments代表每个标签 在ActionBar中。在http://developer.android.com/guide/topics/ui/actionbar.html的文档中,我实现了一个拆分ActionBar,其中顶部有选项卡,ActionBar底部有剩余的Action Items。 因为每个选项卡的Fragment都有自己特定的Action Items,所以在调用Fragment时会加载一个表示这些Actions的菜单。 这一般起作用。但是,Action Items始终显示在ActionBar底部的Overflow菜单中,即使剩下足够的空间。实际上,没有可见的项目或文本占用空间。
我正在使用支持v4库。
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);
}
}
}
清单
<?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>
日历菜单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>
结果截图
答案 0 :(得分:1)
您正在使用原生操作栏,因为您继承自FragmentActivity
,而不是ActionBarActivity
。因此,myfirstapp:showAsAction
将被忽略。使用android:showAsAction
作为原生操作栏。
如果您打算将appcompat-v7
用于操作栏backport,请将您的课程更改为继承ActionBarActivity
,而不是FragmentActivity
。