0

我在 android 中有一个简单的应用程序(开发中),我想让它与 2.0 -> 4.3 兼容,所以我想使用 actionbar(阅读支持 v7),当我编写代码并在 android 2.3 中执行运行时,例如 actionbar 保持美观(见这里我所说的图像)但是当在 vm 4.0+ 中运行时不知道为什么但是操作项进入了 android 的底部(参见我所说的图像)我怎样才能将我的代码更改为平台中的行为是否相同?

MainActivity.java

import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.PopupMenu;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

public class MainActivity extends ActionBarActivity {

private final String TAG = this.getClass().getSimpleName();

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

    ActionBar actionBar = getSupportActionBar();
    actionBar.setBackgroundDrawable(new ColorDrawable(Color
            .parseColor("#CCCCCC")));

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.clear();
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getOrder()) {
    case 1:
        Log.i(TAG, "Tentando criar o actionbar menu.");
        View menuItemView = findViewById(R.id.action_search);
        PopupMenu popupMenu = new PopupMenu(this, menuItemView);
        popupMenu.inflate(R.menu.popup_menu);

        popupMenu.show();
        break;
    }
    return true;
}

}

菜单.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:creditguard="http://schemas.android.com/apk/res-auto" >

<item
    android:id="@+id/action_search"
    android:icon="@drawable/ic_action_accept"
    android:orderInCategory="1"
    android:title="Search"
    creditguard:showAsAction="always"/>
<item
    android:id="@+id/action_search"
    android:icon="@drawable/ic_action_accept"
    android:orderInCategory="2"
    android:title="Search"
    creditguard:showAsAction="ifRoom|never"/>

  </menu>

AndroidManifest.xml

   <?xml version="1.0" encoding="utf-8"?>
   <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="br.com.creditguard"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="7"
        android:targetSdkVersion="18" />

    <!-- Permissions -->
        ...

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat.Light.DarkActionBar" >
        <activity
            android:name="br.com.creditguard.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>
        </activity>

        <!-- Service declararion -->
        <service/>
            ...
        </service>

        <!-- Receiver to start service on boot -->
        <receiver/>

        </receiver>
            ...
        <!-- Widget -->
        <receiver/>
            ...
        </receiver>
    </application>

    </manifest>

对不起,如果英语不好。

4

1 回答 1

1

这是因为android:uiOptions="splitActionBarWhenNarrow"on 属性AndroidManifest.xml告诉 android 如果顶部没有足够的空间来拆分操作菜单

只有 API 级别 14 和更高级别才能理解此属性(旧版本会忽略它)。

要支持旧版本,请添加一个元素作为每个元素的子元素,为“android.support.UI_OPTIONS”声明相同的值。

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

有关更多信息,请参阅Android 文档

于 2014-01-12T15:34:01.500 回答