好的,我确定这是一个愚蠢的问题,但我无法在网上找到答案。我想为上下文菜单注册一个菜单项,但我不知道如何无法弄清楚如何作为视图访问MenuItem。因此,当我单击应用程序ActionBar上的其中一个按钮时,我想要弹出一个上下文菜单。我猜这必须在OnCreateOptionsMenu中完成?
编辑:更新...添加此代码可以部分工作,但会覆盖我的Drawable。
XML
<item android:id="@+id/Favorites"
android:title="favorite_label"
android:icon="@android:drawable/ic_menu_myplaces"
android:actionViewClass="android.widget.ImageButton"
android:showAsAction="always"
/>
主要活动
FavoriteButton = (ImageButton) menu.findItem(R.id.Favorites).getActionView();
FavoriteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
registerForContextMenu(v);
}
});
答案 0 :(得分:0)
您可以点击以下链接exmple link
ListView list = (ListView)findViewById(R.id.list);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listitem, Countries);
list.setAdapter(adapter);
registerForContextMenu(list);
更改registerForContextMenu(list); to registerForContextMenu(buttonname);
我希望它对你有用。
答案 1 :(得分:0)
在resource / menu / main.xml中添加以下代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<menu>
<item
android:id="@+id/gray"
android:title="@string/gray" />
<item
android:id="@+id/green"
android:title="@string/green" />
<item
android:id="@+id/red"
android:title="@string/red" />
<item
android:id="@+id/orange"
android:title="@string/orange" />
<item
android:id="@+id/purple"
android:title="@string/dark_blue" />
</menu>
</item>
</menu>
在主活动中,您可以通过覆盖belo方法来访问它:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.gray:
color = Color.parseColor("#FF666666");
return true;
case R.id.green:
color = Color.parseColor("#FF96AA39");
return true;
case R.id.orange:
color = Color.parseColor("#FFF4842D");
return true;
case R.id.purple:
color = Color.parseColor("#FF5161BC");
return true;
}
return super.onOptionsItemSelected(item);
}
答案 2 :(得分:0)
以下是我所做的:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// "menu_main" is the menubar of my actionbar menu
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
// "item" is the menu button I have pressed
int id = item.getItemId();
// "Settings" button
if (id == R.id.action_settings) {
return true;
}
// Difficulty button to change the difficulty of my game
else if (id == R.id.action_difficulty) {
View view = findViewById(R.id.action_difficulty);
registerForContextMenu(view);
openContextMenu(view);
}
return super.onOptionsItemSelected(item);
}
这对我来说很好用!
BUT!如果您的菜单栏按钮位于“三点”按钮后面,则为
行registerForContextMenu(view);
会使您的申请崩溃。我在弄清楚为什么......