如何编辑右上角包含设置的列表?
How to edit the list in the right up corner that contains settings?
我试过了
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Log.v(
this.getClass().getName() + "!!!",
new Exception().getStackTrace()[0].getMethodName()
);
MenuItem m_item = (MenuItem)menu.findItem(R.id.action_settings);
if(m_item != null)
m_item.setTitle("Back to test");
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.settings, menu);
return true;
}
但它也总是得到 null.And,onCreate 似乎也将它设为 null。有没有我可以在运行时修改文本的功能???如果是这样,有没有简单的方法可以找到它?
而不是
getMenuInflater().inflate(R.menu.settings, menu);
做类似的事情:
getMenuInflater().inflate(R.menu.menu_custom, menu);
其中 res/menu/menu_custom.xml 类似于:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_search"
android:icon="@drawable/ic_action_search"
android:title="@string/search"/>
<item android:id="@+id/menu_settings"
android:icon="@drawable/ic_action_settings"
android:title="@string/settings" />
</menu>
这将在下拉列表中为您提供两个项目。您的 res/menu/settings.xml 中似乎只有一项。
您应该在菜单中添加项目 xml。您可以在文件夹 res/menu 中找到它。那里有 inflation.
的所有可用菜单
我想你只有一个。这是添加选项后的样子:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/searchMain"
android:icon="@drawable/ic_action_search"
app:showAsAction="ifRoom|withText"
android:title="Search"/>
<item
android:id="@+id/searchBarcodeScan"
android:icon="@drawable/ic_launcher"
app:showAsAction="always|withText"
android:title="Scanner"/>
<item
android:id="@+id/seeList"
android:icon="@drawable/ic_launcher"
app:showAsAction="ifRoom|withText"
android:title="See list"/>
<item
android:id="@+id/settings"
android:icon="@drawable/ic_settings"
app:showAsAction="ifRoom|withText"
android:title="Settings"/>
</menu>
然后在您的 activity 中,您可以通过覆盖此方法并在其中执行操作来对所选选项做出反应:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.searchMain:
doSomething();
return true;
case R.id.searchBarcodeScan:
doSomething2();
return true;
case R.id.seeList:
doSomething3();
return true;
case R.id.settings:
doSomething4();
return true;
}
return super.onOptionsItemSelected(item);
}
编辑
为了在运行时更改菜单,您应该调用方法 invalidateOptionsMenu()。此方法将强制重新创建菜单,这一次将调用 onPrepareOptionsMenu 方法。您应该以这种方式在 Activity 中覆盖它:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(someCondition){
getMenuInflater().inflate(R.menu.main_menu, menu);
}
else if(someOtherCondition){
getMenuInflater().inflate(R.menu.other_menu, menu);
}
return true;
}
我试过了
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Log.v(
this.getClass().getName() + "!!!",
new Exception().getStackTrace()[0].getMethodName()
);
MenuItem m_item = (MenuItem)menu.findItem(R.id.action_settings);
if(m_item != null)
m_item.setTitle("Back to test");
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.settings, menu);
return true;
}
但它也总是得到 null.And,onCreate 似乎也将它设为 null。有没有我可以在运行时修改文本的功能???如果是这样,有没有简单的方法可以找到它?
而不是
getMenuInflater().inflate(R.menu.settings, menu);
做类似的事情:
getMenuInflater().inflate(R.menu.menu_custom, menu);
其中 res/menu/menu_custom.xml 类似于:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_search"
android:icon="@drawable/ic_action_search"
android:title="@string/search"/>
<item android:id="@+id/menu_settings"
android:icon="@drawable/ic_action_settings"
android:title="@string/settings" />
</menu>
这将在下拉列表中为您提供两个项目。您的 res/menu/settings.xml 中似乎只有一项。
您应该在菜单中添加项目 xml。您可以在文件夹 res/menu 中找到它。那里有 inflation.
的所有可用菜单我想你只有一个。这是添加选项后的样子:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/searchMain"
android:icon="@drawable/ic_action_search"
app:showAsAction="ifRoom|withText"
android:title="Search"/>
<item
android:id="@+id/searchBarcodeScan"
android:icon="@drawable/ic_launcher"
app:showAsAction="always|withText"
android:title="Scanner"/>
<item
android:id="@+id/seeList"
android:icon="@drawable/ic_launcher"
app:showAsAction="ifRoom|withText"
android:title="See list"/>
<item
android:id="@+id/settings"
android:icon="@drawable/ic_settings"
app:showAsAction="ifRoom|withText"
android:title="Settings"/>
</menu>
然后在您的 activity 中,您可以通过覆盖此方法并在其中执行操作来对所选选项做出反应:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.searchMain:
doSomething();
return true;
case R.id.searchBarcodeScan:
doSomething2();
return true;
case R.id.seeList:
doSomething3();
return true;
case R.id.settings:
doSomething4();
return true;
}
return super.onOptionsItemSelected(item);
}
编辑 为了在运行时更改菜单,您应该调用方法 invalidateOptionsMenu()。此方法将强制重新创建菜单,这一次将调用 onPrepareOptionsMenu 方法。您应该以这种方式在 Activity 中覆盖它:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(someCondition){
getMenuInflater().inflate(R.menu.main_menu, menu);
}
else if(someOtherCondition){
getMenuInflater().inflate(R.menu.other_menu, menu);
}
return true;
}