3

我正在尝试创建自己的菜单项样式,但还没有成功。

我有一些方法: 1)

@Override 
public boolean onCreateOptionsMenu(Menu menu) {
    boolean result = super.onCreateOptionsMenu(menu);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.drawable.menu, menu);
    return result;      
}

菜单.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/add"
          android:icon="@android:drawable/ic_menu_add"
          android:title="@string/add" />
</menu>

2)

@Override 
public boolean onCreateOptionsMenu(Menu menu) {
    boolean result = super.onCreateOptionsMenu(menu);
    MenuItem m1 = menu.add(0, 0, 0, R.string.add);
    m1.setIcon(android.R.drawable.ic_input_add);
    return result;      
}

但在这两种情况下,我的菜单项都保持“标准”。我应该怎么做才能改变它的大小、位置等?

4

1 回答 1

1

首先,我不建议您定义自己的菜单样式。在我个人看来,这不是应该改变的事情。它对于 ICS+ 设备也没有用,因为它们没有专用的菜单按钮。

但是,如果您希望这样做,您将不得不离开现有的菜单设置,因为无法更改默认行为。

您需要做的是在现有布局中为您的活动创建一个隐藏布局,然后挂钩 getKeyDown 事件以隐藏/显示此布局。

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        myCustomMenu.toggleVisibility();
        return true;
    } else {
        return super.onKeyDown(keyCode, event);
    }       
}

该方法可能看起来像这样

public void toggleVisibility() {
    LinearLayout myCustomMenuLayout = (LinearLayout) findViewById(R.id.myCustomMenu);
    if (myCustomMenuLayout.getVisibility() == View.GONE) {
        myCustomMenuLayout.setVisibility(View.VISIBLE);
    } else {
        myCustomMenuLayout.setVisibility(View.GONE);
    }
}

当涉及到布局时,最好在一个单独的布局中创建它,然后像下面这样引用它。这样您就可以多次引用它而无需重复代码。

<include android:id="@+id/myCustomMenu" layout="@layout/customMenu" visibility="gone">

从那里你只需要填充菜单并定义 onclicklisteners 等

于 2012-07-16T20:20:24.973 回答