我正在使用AppCompat_v7库构建Android应用,并且我在操作栏中遇到了麻烦。
我有一个AppBarActivity,它扩展了ActionBarActivity - 我使用相同的操作栏来完成我的所有活动。 MainActivity扩展了AppBarActivity。我已经定义了四个操作栏图标,其中两个我希望一次显示。我一直小心定义自己的命名空间,即。 app:showAsAction="always"/>
在我的应用中,我在onPrepareOptionsMenu()
MenuItem contactOn = menu.findItem(R.id.contact_toggle_button_on);
MenuItem contactOff = menu.findItem(R.id.contact_toggle_button_off);
contactOn.setVisible(!useContacts);
contactOn.setEnabled(!useContacts);
contactOff.setVisible(useContacts);
contactOff.setEnabled(useContacts);
我是否需要以某种方式指定命名空间?因为看起来这些方法似乎没有做任何事情,除了奇怪的是,在溢出列表中重新排列它们的名字。此外,四个按钮中只有三个显示在那里,我也不了解,但我认为这是一个不同的问题。
更新:发布代码& XML
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inf = new MenuInflater(this);
inf.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem contactOn = menu.findItem(R.id.contact_toggle_button_on);
MenuItem contactOff = menu.findItem(R.id.contact_toggle_button_off);
contactOn.setVisible(!useContacts);
contactOn.setEnabled(!useContacts);
contactOff.setVisible(useContacts);
contactOff.setEnabled(useContacts);
MenuItem locationOn = menu.findItem(R.id.location_toggle_button_on);
MenuItem locationOff = menu.findItem(R.id.location_toggle_button_off);
locationOn.setVisible(useLocation);
locationOn.setEnabled(useLocation);
locationOff.setVisible(!useLocation);
locationOff.setEnabled(!useLocation);
return true;
}
和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="com.example.skortchm.strangerapp.MainActivity" >
<!-- Contacts Toggle, should appear as action button -->
<item
android:id="@+id/contact_toggle_button_on"
android:icon="@drawable/ic_action_call"
android:title="@string/contact_toggle_on"
app:showAsAction="always"/>
<item
android:id="@+id/contact_toggle_button_off"
android:icon="@drawable/ic_action_call_off"
android:title="@string/contact_toggle_off"
app:showAsAction="always"/>
<!-- Location Toggle, should appear as action button -->
<item
android:id="@+id/location_toggle_button_on"
android:icon="@drawable/ic_action_location_searching"
android:title="@string/location_toggle_on"
app:showAsAction="always"/>
<item
android:id="@+id/location_toggle_button_off"
android:icon="@drawable/ic_action_location_off"
android:title="@string/location_toggle_off"
app:showAsAction="always"/>
<!-- Settings, should always be in the overflow -->
<!-- Add gear icon here -->
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never"/>
</menu>
答案 0 :(得分:0)
您需要使用getMenuInflater
来扩充菜单。
您正在为MenuInflater
创建一个实例,这是不对的。您必须使用与Activity
将您的onCreateOptionsMenu
更改为
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}