2012-07-02 74 views
3

我想創建我自己的菜單項的樣式,但還沒有設法做到這一點。選項菜單樣式

有一些方法我做到這一點: 1)

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

menu.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;  
} 

但是在這兩種情況下,我的菜單項都保持「標準」。我應該怎麼做來改變它的大小,位置等?

+0

我不認爲你可以改變菜單的外觀,因爲它是菜單式的默認行爲。 –

回答

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等