Android - res/menu和res/layout之间的区别是什么?

5

我是一名相对较新的安卓开发者,这点你可能已经从我的问题中看出来了。我发现自己既有res/menu文件夹,又有res/layout文件夹。它们都包含每个活动的XML文件。但我没有有意识地使用过res/menu文件夹!我所有的样式都在res/layout中完成。那么我该在res/menu的xml文件中做什么呢?

3个回答

8

它旨在与menuInflater一起使用,在您的活动的onCreateOptionsMenu方法中创建菜单。

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

例如,这个例子中的 main.xml 文件可能如下所示:

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

    <item
        android:id="@+id/menu_item_1"
        android:title="@string/menu_title2">
    </item>
    <item
        android:id="@+id/menu_item_2"
        android:title="@string/menu_title2">
    </item>
</menu>

当菜单项被点击时要执行的操作可以通过重写onOptionsItemSelected方法来实现,例如:

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    switch (item.getItemId())
    {
    case (R.id.menu_item_1):
        this.startActivity(new Intent(this, MyFirstActivity.class));
        return true;
    case (R.id.menu_item_2):
        this.startActivity(new Intent(this, MySecondActivity.class));
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

1
在 Android 中,菜单是在按下菜单按钮时从屏幕底部拉起的。这个菜单是在你的活动类中的 onCreateOptionsMenu 类中创建的。
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

正如您所看到的,这里正在"填充"R.menu.main。R.menu.main只是您的res/menu文件夹下命名为main.xml的文件。示例菜单xml文件如下所示:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_item_1"
        android:title="Menu Item">
    </item>
 </menu>

这个XML文件生成一个菜单,其中有一个可点击的选项:“菜单项”。
Android布局文件用于创建活动的布局。在示例onCreate方法中:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

setContentView()方法需要一个布局文件的id。R.layout.main是位于res/layout目录下名为main.xml的文件。该代码将此活动的布局设置为在main.xml中指定的内容。

几乎所有的Android IDE都会默认创建一个布局和一个菜单文件夹,包括Eclipse在内。


1
菜单文件夹如其名称所示,用于存储xml文件,以便使用xml管理菜单而不是通过编程实现。

一份简单而好的教程


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接