Java 操作栏溢出菜单不显示在顶部的<;13使用V7应用程序兼容的API级别和ID?

Java 操作栏溢出菜单不显示在顶部的<;13使用V7应用程序兼容的API级别和ID?,java,android,android-actionbar,actionbarsherlock,Java,Android,Android Actionbar,Actionbarsherlock,我正在尝试制作actionbar演示。我已经使用v7应用程序压缩为此,我需要支持7至18 api级别。我尝试了这么多的解决方案,但我不能得到合适的解决方案,以适合我的演示。 问题是溢出菜单在Api级别13。我需要在顶部显示所有vesrion 此图像是API级别2.3。这正是我所需要的。但是当我尝试在api级别

我正在尝试制作actionbar演示。我已经使用v7应用程序压缩为此,我需要支持7至18 api级别。我尝试了这么多的解决方案,但我不能得到合适的解决方案,以适合我的演示。 问题是溢出菜单在Api级别<13的底部显示,在顶部显示>13。我需要在顶部显示所有vesrion

此图像是API级别2.3。这正是我所需要的。但是当我尝试在api级别<13的情况下进行测试时

此图像是API级别4.0

Java代码

    @SuppressLint("NewApi")
    public class ActionBarMain extends ActionBarActivity implements TabListener {
        RelativeLayout rl;
        ActionBarDrawerToggle mDrawerToggle;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            supportRequestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
            setContentView(R.layout.activity_action_bar_main);

            try {
                rl = (RelativeLayout) findViewById(R.id.mainLayout);

                fragMentTra = this.getSupportFragmentManager().beginTransaction();

                ActionBar bar = getSupportActionBar();
                bar.setIcon(R.drawable.ic_action_previous_item);
                // getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffffff'>test1</font>"));

                Drawable d = getResources().getDrawable(R.drawable.top_bar);
                getSupportActionBar().setBackgroundDrawable(d);
                bar.addTab(bar.newTab().setText("testTab1").setTabListener(this));
                bar.addTab(bar.newTab().setText("testTab2").setTabListener(this));
                bar.addTab(bar.newTab().setText("testTab3").setTabListener(this));
                bar.addTab(bar.newTab().setText("testTab4").setTabListener(this));

                bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM
                        | ActionBar.DISPLAY_USE_LOGO);
                bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
                bar.setDisplayShowHomeEnabled(true);
                bar.setDisplayShowTitleEnabled(true);
                bar.show();

            } catch (Exception e) {
                e.getMessage();
            }

        }

        FragMent1 fram1;
        FragmentTransaction fragMentTra = null;
        FragMent2 fram2;
        FragMent3 fram3;
        FragMent4 fram4;

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // getMenuInflater().inflate(R.menu.activity_action_bar_main, menu);
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.activity_action_bar_main, menu);

            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // TODO Auto-generated method stub

            View menuItemView = findViewById(R.id.item_menu_overflow);

            PopupMenu popupMenu = new PopupMenu(this, menuItemView);
            popupMenu.inflate(R.menu.popup);

            popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {

                @Override
                public boolean onMenuItemClick(MenuItem arg0) {
                    // TODO Auto-generated method stub

                    return false;
                }

            });

            popupMenu.show();

            return true;

        }

        @Override
        public void onTabReselected(Tab tab,
                android.support.v4.app.FragmentTransaction ft) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onTabSelected(Tab tab,
                android.support.v4.app.FragmentTransaction ft) {
            // TODO Auto-generated method stub
            if (tab.getText().equals("Home")) {

                try {
                    rl.removeAllViews();
                } catch (Exception e) {
                }
                fram1 = new FragMent1();
                fragMentTra.addToBackStack(null);
                fragMentTra = this.getSupportFragmentManager().beginTransaction();
                // fragMentTra.add(rl.getId(), fram1);
                fragMentTra.commit();
            } else if (tab.getText().equals("Post")) {
                try {
                    rl.removeAllViews();
                } catch (Exception e) {
                }
                fram2 = new FragMent2();
                fragMentTra.addToBackStack(null);
                fragMentTra = this.getSupportFragmentManager().beginTransaction();
                fragMentTra.add(rl.getId(), fram2);
                fragMentTra.commit();
            } else if (tab.getText().equals("Filter")) {
                try {
                    rl.removeAllViews();
                } catch (Exception e) {
                }
                fram3 = new FragMent3();
                fragMentTra.addToBackStack(null);
                fragMentTra = this.getSupportFragmentManager().beginTransaction();
                // fragMentTra.add(rl.getId(), fram3);
                fragMentTra.commit();
            } else if (tab.getText().equals("GPS")) {
                try {
                    rl.removeAllViews();
                } catch (Exception e) {
                }
                fram4 = new FragMent4();
                fragMentTra.addToBackStack(null);
                fragMentTra = this.getSupportFragmentManager().beginTransaction();

                // fragMentTra.add();
                fragMentTra.commit();
            }
        }

        @Override
        public void onTabUnselected(Tab tab,
                android.support.v4.app.FragmentTransaction ft) {
            // TODO Auto-generated method stub

        }

    }
@SuppressLint(“NewApi”)
公共类ActionBarMain扩展ActionBarActivity实现TablListener{
相对寿命;
ActionBarDrawerToggle mDrawerToggle;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
supportRequestWindowFeature(窗口功能\操作\栏\覆盖);
setContentView(R.layout.activity\u action\u bar\u main);
试一试{
rl=(RelativeLayout)findViewById(R.id.mainLayout);
fragMentTra=this.getSupportFragmentManager().beginTransaction();
ActionBar=getSupportActionBar();
条形设置图标(R.drawable.ic\u action\u previous\u item);
//getSupportActionBar().setTitle(Html.fromHtml(“test1”);
Drawable d=getResources().getDrawable(R.Drawable.top_条);
getSupportActionBar().setBackgroundDrawable(d);
addTab(bar.newTab().setText(“testTab1”).setTabListener(this));
addTab(bar.newTab().setText(“testTab2”).setTabListener(this));
bar.addTab(bar.newTab().setText(“testTab3”).setTabListener(this));
bar.addTab(bar.newTab().setText(“testTab4”).setTabListener(this));
设置显示选项(ActionBar.DISPLAY\u显示\u自定义
|操作栏。显示(使用标识);
设置导航模式(操作栏导航模式选项卡);
bar.setDisplayShowHomeEnabled(真);
bar.setDisplayShowTitleEnabled(真);
bar.show();
}捕获(例外e){
e、 getMessage();
}
}
片段1片段1;
FragmentTransaction fragMentTra=null;
碎片2碎片2;
碎片3碎片m3;
碎片4碎片4;
@凌驾
公共布尔onCreateOptions菜单(菜单){
//getMenuInflater().充气(R.menu.activity\u action\u bar\u main,菜单);
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。活动\动作\主菜单栏\主菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//TODO自动生成的方法存根
View menuItemView=findViewById(R.id.item\u菜单\u溢出);
PopupMenu PopupMenu=新建PopupMenu(此菜单为menuItemView);
弹出菜单。充气(右菜单。弹出);
setOnMenuItemClickListener(新的OnMenuItemClickListener(){
@凌驾
公共布尔值onMenuItemClick(菜单项arg0){
//TODO自动生成的方法存根
返回false;
}
});
show();
返回true;
}
@凌驾
已重新选择公共选项卡(选项卡,
android.support.v4.app.FragmentTransaction(ft){
//TODO自动生成的方法存根
}
@凌驾
已选择的公共空栏(选项卡,
android.support.v4.app.FragmentTransaction(ft){
//TODO自动生成的方法存根
if(tab.getText().equals(“Home”)){
试一试{
rl.removeallview();
}捕获(例外e){
}
fragm1=新的FragMent1();
fragMentTra.addToBackStack(空);
fragMentTra=this.getSupportFragmentManager().beginTransaction();
//fragMentTra.add(rl.getId(),fragm1);
fragMentTra.commit();
}else if(tab.getText().equals(“Post”)){
试一试{
rl.removeallview();
}捕获(例外e){
}
fragm2=新的FragMent2();
fragMentTra.addToBackStack(空);
fragMentTra=this.getSupportFragmentManager().beginTransaction();
fragMentTra.add(rl.getId(),fragm2);
fragMentTra.commit();
}else if(tab.getText().equals(“过滤器”)){
试一试{
rl.removeallview();
}捕获(例外e){
}
fragm3=新的片段3();
fragMentTra.addToBackStack(空);
fragMentTra=this.getSupportFragmentManager().beginTransaction();
//fragMentTra.add(rl.getId(),framm3);
fragMentTra.commit();
}else if(tab.getText().equals(“GPS”)){
试一试{
rl.removeallview();
}捕获(例外e){
}
fram4=新的片段4();
fragMentTra.addToBackStack(空);
fragMentTra=this.getSupportFragmentManager().beginTransaction();
//fragMentTra.add();
fragMentTra.commit();
}
}
@凌驾
已选择“公用”选项卡(选项卡,
android.support.v4.app.FragmentTransaction(ft){
//TODO自动生成的方法存根
}
}
Menu.xml

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:yourapp="http://schemas.android.com/apk/res-auto" >

        <item
            android:id="@+id/item_menu_overflow"
            android:icon="@drawable/ic_action_overflow"

               android:orderInCategory="100"

             yourapp:showAsAction="ifRoom" 
             android:showAsAction="ifRoom"
           >
        </item>

    </menu>

AndroidMainFrest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ahmad.actionBar"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <meta-data
        android:name="android.support.UI_OPTIONS"
        android:value="splitActionBarWhenNarrow" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat.Light"
        android:uiOptions="splitActionBarWhenNarrow" >
        <activity
            android:name=".ActionBarMain"
            android:label="@string/title_activity_action_bar_main"
            android:screenOrientation="portrait"
            android:uiOptions="splitActionBarWhenNarrow" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

这将强制按下溢出按钮
    try {
        ViewConfiguration config = ViewConfiguration.get(this);
        Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
        if(menuKeyField != null) {
            menuKeyField.setAccessible(true);
            menuKeyField.setBoolean(config, false);
        }
    } catch (Exception ex) {
        // Ignore
    }