将动作添加到Action Bar Android

时间:2015-05-13 00:36:04

标签: java android android-actionbar

我正在尝试向操作栏添加搜索图标,它会显示在Android Studio的xml预览中,但是当我运行我的应用时,它会显示在溢出菜单中而不是操作栏上的图标。我做错了什么?

menu_launch.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".LaunchActivity">

<item android:id="@+id/action_search"
    android:icon="@drawable/ic_action_search"
    android:title="@string/action_search"
    app:showAsAction="ifRoom"/>

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

我尝试将app:showAsAction设置为"always"但不起作用。

在我的LaunchActivity.java中:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_launch, menu);
    return super.onCreateOptionsMenu(menu);
}

我的LaunchActivity.java扩展了Activity,而不是ActionBarActivity,我不知道这与它有什么关系。

感谢您的帮助,这是我的第一个应用程序。

5 个答案:

答案 0 :(得分:1)

对于ActionBarActivity,您将使用app:showAsAction,因为它将是AppCompat属性。

对于Activity,您应该使用android:showAsAction,因为这是它读取的唯一属性。

如果您希望它始终显示为图标,请将该属性设置为"always"

答案 1 :(得分:0)

让您的活动扩展ActionBarActivity。您拥有的menu_launch.xml将起作用。

答案 2 :(得分:0)

尝试更改主题。这也取决于你的主题。 在styles.xml文件中

     <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">

让我知道这是否有效,因为其他一切似乎都在您的代码中工作。您还需要将此引用放在manifest.xml文件中。 为您的主要活动

<application
android:theme="@style/AppTheme" />

根据文件..

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
 <!-- Search, should appear as action button -->
<item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"
      android:showAsAction="ifRoom" />
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
      android:title="@string/action_settings"
      android:showAsAction="never" />
</menu>

这声明当操作栏中的空间可用时,搜索操作应显示为操作按钮,但“设置”操作应始终显示在溢出中。 ( 默认情况下,所有操作都会显示在溢出中,但明确声明每个操作的设计意图是一种很好的做法。

因此,尝试旋转屏幕时,只要有适合图标的空间,您的应用就会显示它。 你应该设置showAsAction =&#34;总是&#34;。

答案 3 :(得分:0)

Why you are sitting app:showAsAction="never" in action_settings try this

 <menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".LaunchActivity">

      <item android:id="@+id/action_search"
       android:icon="@drawable/ic_action_search"
       android:title="@string/action_search"
       app:showAsAction="ifRoom"/>

       <item android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:orderInCategory="100"
        app:showAsAction="ifRoom"/>
  </menu>

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".LaunchActivity">

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

      <item android:id="@+id/action_search"
       android:icon="@drawable/ic_action_search"
       android:title="@string/action_search"
       app:showAsAction="ifRoom"/>


 </menu>

答案 4 :(得分:0)

android:showAsAction="never"

android:showAsAction="ifRoom"

这些问题只是将其改为

android:showAsAction="always"

尝试将app:showAsAction更改为android:showAsAction