3

解决方案:图像搜索图标有问题。Android没有找到搜索操作的图像,我没有在所有res文件夹中添加它们,之后它开始显示......

我正在尝试将操作栏添加到应用程序中,并且我正在遵循Google 开发者网站中显示的基本应用程序教程

我已经编写了以下代码。

主要活动

public class MainActivity extends ActionBarActivity {

    public void openSearch(){

        System.out.println("TEST SEARCH");

    }
    public void openSettings(){

        System.out.println("TEST SETTINGS");

    }

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

    @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.main_activity_actions, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle presses on the action bar items
        switch (item.getItemId()) {
            case R.id.action_search:
                openSearch();
                return true;
            case R.id.action_settings:
                openSettings();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

}

res/menu/main_activity_actions.xml

<?xml version="1.0" encoding="utf-8"?>
<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>

AndroidManifest.xml

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.sample.actionbarsample.MainActivity"
        android:label="@string/app_name" 
        android:theme="@style/Theme.AppCompat" 
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

但不是像这样的操作栏

在此处输入图像描述

我得到一个选项菜单。当我在运行应用程序时按下菜单按钮时会出现。

运行 4.2.2 的模拟器上的屏幕截图

我从教程中遗漏了什么,或者代码中有什么问题?

编辑

在做了beworker问我的事情之后,我得到了这个结果,仍然缺少搜索框。

在此处输入图像描述

4

2 回答 2

8

您的代码或教程都没有错。这都是关于你的模拟器的配置。您需要以具有软件按钮的方式配置您的模拟器。切换到“设备定义”选项卡并编辑使用“软件”按钮的设备,如下图所示。

在此处输入图像描述

或者,您可以简单地取消选中 ADV 配置中的“键盘/硬件键盘存在”属性(见下图)并重新启动您的模拟器。

在此处输入图像描述

如果存在硬件菜单按钮,Android 4.0 会模拟旧式菜单。这就是为什么所有菜单操作都将进入那里的原因。如果您在模拟器中禁用硬件菜单,则操作将按预期转到操作栏。

请注意,在带有硬件菜单按钮(如三星 G2、G3 等)的手机上,菜单弹出窗口仍会出现,您无法在代码中更改此设置。Android 将决定在每台设备上什么对用户体验更好。

更新

另一个注意事项。如果您使用兼容性库,请确保您使用xmlns:yourapp="http://schemas.android.com/apk/res-auto"yourapp:showAsAction="always"如下所述。

但是,如果您的应用使用支持库来兼容低至 Android 2.1 的版本,则 showAsAction 属性在 android: 命名空间中不可用。相反,此属性由支持库提供,您必须定义自己的 XML 命名空间并将该命名空间用作属性前缀。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
    <!-- Search, should appear as action button -->
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          yourapp:showAsAction="always"  />
    ...
</menu>
于 2013-08-23T16:23:08.080 回答
1

我从教程中遗漏了什么,或者代码中有什么问题?

是,有一点不同。尝试从您的项目中删除示例单词。

实际上,您的项目名称占据了所有空间,并且在搜索菜单项中,您已要求系统提供空间,如果有任何可用空间/空间不是由于项目名称过长(可能是活动或其他)在您的情况下.

因此,要么将您的项目名称更改为较小的名称,要么像这样使用“始终”:

  <item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"
      android:showAsAction="always" />
于 2013-08-23T16:44:17.937 回答