将Action Bar添加到Android应用程序

时间:2014-01-08 17:20:24

标签: android android-activity android-actionbar

我正在使用本指南http://developer.android.com/guide/topics/ui/actionbar.html创建项目并将其添加到我的应用中的操作栏。但是这些物品没有出现。这是menu.xml

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

<item android:id="@+id/action_alert"
      android:icon="@drawable/ic_dialog_alert"
      android:title="@string/action_alert"
      android:showAsAction="ifRoom" />

<item android:id="@+id/action_settings"
      android:title="@string/action_settings"
      android:showAsAction="never" />

我已经在清单

中添加了主题
<application
    android:allowBackup="true"
    android:debuggable="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Holo" >

最后这是Activity中的onCreateOptionsMenu

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_main, menu);
    return super.onCreateOptionsMenu(menu);
}

我知道Action Bar工作正常,因为我可以毫无问题地隐藏它

ActionBar actionBar = getActionBar();
actionBar.hide();

我错过了什么?

3 个答案:

答案 0 :(得分:0)

如果您担心没有图标出现,请尝试changind android:showAsAction =&#34; ...&#34;到android:showAsAction =&#34;总是&#34;。这将明确显示图标。如果您支持多种屏幕分辨率,这不是一个好的解决方案。

答案 1 :(得分:0)

XML命名空间

menu.xml文件中尝试如下所示的自定义命名空间。你可以用任何你喜欢的方式替换自定义。

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

然后在您的项目(相同的xml文件)中使用该命名空间而不是android命名空间

<item android:id="@+id/action_alert"
  android:icon="@drawable/ic_dialog_alert"
  android:title="@string/action_alert"
  custom:showAsAction="ifRoom" />

完成(工作)示例

可以在this menu-drawer-compat-example on github找到更完整的示例。菜单xml文件的内容有:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:hcpl="http://schemas.android.com/apk/res-auto" >
<!-- used custom ns hcpl to force display of action buttons -->

<item
    android:id="@+id/action_websearch"
    android:icon="@drawable/action_search"
    android:showAsAction="ifRoom|withText"
    android:title="@string/action_websearch"
    hcpl:showAsAction="ifRoom"/>

</menu>

这是Android compat Actionbar的示例项目,如果您比较代码,请记住这一点。

答案 2 :(得分:0)

使用设备硬件设置按钮时,您的溢出按钮会移动到设置按钮,有两种方法可以解决这个问题:

<强> XML:

实例化你自己的溢出:

<item android:title=""
        android:id="@+id/more"
        android:showAsAction="always"
        android:icon="@drawable/overflow">
  <menu>    
   <item android:id="@+id/action_alert"
      android:icon="@drawable/ic_dialog_alert"
      android:title="@string/action_alert"
      android:showAsAction="never" />

   <item android:id="@+id/action_settings"
      android:title="@string/action_settings"
      android:showAsAction="never" />
  </menu>
</item>

<强>的.java:

try {
    ViewConfiguration config = ViewConfiguration.get(this);
    Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
    if (menuKeyField != null) {   
       menuKeyField.setAccessible(true);   
       menuKeyField.setBoolean(config, false);
    }
} catch (Exception e) {   
    e.printStackTrace();
}