我知道这个问题非常蹩脚,但我在这里遇到了困难。我是Android的新手,我正在尝试按照谷歌的教程创建一个操作栏:
但我已经被困在这里好几个小时了。
我的应用程序有一个登录界面,它将触发主屏幕,在这个主屏幕中,我将有我的操作栏。我已经尝试了很多组合来使这个动作栏出现但没有任何用处。
我尝试过的一件事,简单地添加这个xml源来查看我的布局:
<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>
当我这样做并进入图形布局进行检查时,它会给我这样的信息:
"<menu>" does not set the required layout_width attribute:
(1) Set to "wrap_content"
(2) Set to "match_parent"
"<menu>" does not set the required layout_height attribute:
(1) Set to "wrap_content"
(2) Set to "match_parent"
"action_search" does not set the required layout_width attribute:
(1) Set to "wrap_content"
(2) Set to "match_parent"
"action_search" does not set the required layout_height attribute:
(1) Set to "wrap_content"
(2) Set to "match_parent"
"action_settings" does not set the required layout_width attribute:
(1) Set to "wrap_content"
(2) Set to "match_parent"
"action_settings" does not set the required layout_height attribute:
(1) Set to "wrap_content"
(2) Set to "match_parent"
Exception raised during rendering: com.android.layoutlib.bridge.MockView cannot be cast to android.view.ViewGroup
You must supply a layout_width attribute.
You must supply a layout_height attribute.
如果我设置了布局内容,则下一条错误消息为:
Exception raised during rendering: com.android.layoutlib.bridge.MockView cannot be cast to android.view.ViewGroup
它不能以某种方式呈现布局......我也尝试在菜单外设置一个相对或线性布局,如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background" >
<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>
</RelativeLayout>
但这样我收到了:
Unexpected namespace prefix “xmlns” found for tag Menu
也;我试图从res / layout文件夹中删除我的.xml,并将他留在另一个res / menu文件夹中...只有google提供的.xml;这样我就不会出现语法错误,但是当主屏幕意图导致应用程序崩溃时,我无法再使用图形布局和这种或那种方式。
所以请问,我到底错过了什么?
答案 0 :(得分:1)
菜单xml不是布局xml的一部分。它是菜单文件夹中的单独xml文件,在运行时使用以下代码添加:
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
然后要回复菜单xml中的各个项目,请使用以下代码:
@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);
}
}
如果您想支持Android 2.1及更高版本,请使用此建议 - http://developer.android.com/training/basics/actionbar/setting-up.html#ApiLevel7
答案 1 :(得分:1)
这个答案是基于samleighton87的答案,我建议他编辑他的帖子,但他在stackoverflow上并不那么活跃;因此,根据他的回答,我会给出另一个答案并进行一些修正,以便在遇到问题时澄清我的观点:
查看本教程:https://www.youtube.com/watch?v=iA2Efmo2PCA
一开始你会看到需要做什么以及你缺少什么。
您需要在.xml文件后面创建res / menu文件夹,并使用google在main_activity_actions.xml提供的代码;在此之后,请确保在您的活动.java文件中包含此方法:
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
此.java文件中的主类将扩展“Activity”。您现在将意识到自动生成的是R.java中的Reference,他(R.java)将能够找到您的res / menu文件夹,允许您使用inflater.inflate(R.menu.main_activity_actions, menu);
指向它。请记住:此.xml文件不是布局xml文件的一部分。它是一个
在菜单文件夹中分隔.xml文件,您也将无法使用图形
布局来处理它。
然后要回复菜单xml中的各个项目,请使用以下代码:
@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);
}
}
如果您想支持Android 2.1及更高版本,请使用此建议检查 - http://developer.android.com/training/basics/actionbar/setting-up.html#ApiLevel7
再次感谢samleighton87
欢呼声