2012-11-30 21 views
3

我正在使用ActionBarSherlock。我有一個MenuItem,我想使用一個自定義選擇器只有該MenuItem,而不是ActionBar中的其他人。這是菜單代碼:在ActionBar中使用MenuItem的選擇器

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:id="@+id/menu_include_location" 
     android:icon="@drawable/icon_place_selector" 
     android:showAsAction="always" 
     android:title="@string/menu_include_location"/> 

    <item 
     android:id="@+id/menu_send" 
     android:icon="@drawable/ic_send" 
     android:showAsAction="ifRoom|withText" 
     android:title="@string/menu_send"/> 

</menu> 

這裏是icon_place_selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/location_place" android:state_pressed="false"/> 
    <item android:drawable="@drawable/location_no_gradient" android:state_pressed="true"/> 

</selector> 

的問題是,在菜單項,圖標只是其中的一小部分。以下是顯示內容的截圖。整個背景應該改變,而不僅僅是圖標。我怎麼做?

enter image description here

回答

4

您可以通過在代碼中設置一個自定義的ActionView更改特定動作欄項目的選擇:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getSupportMenuInflater().inflate(R.menu.activity_main, menu); 
    MenuItem menuItem = menu.findItem(R.id.menu_include_location); 
    ImageView image = new ImageView(this); 
    image.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 
      LayoutParams.MATCH_PARENT)); 
    image.setPadding(16, 0, 16, 0); 
    image.setImageResource(R.drawable.ic_launcher); 
    image.setBackgroundResource(R.drawable.icon_place_selector); 
    image.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // ... 
     } 
    }); 
    menuItem.setActionView(image); 
    return true; 
} 

,如果你想改變選擇的所有動作欄應用這些樣式項目:

<style name="AppTheme" parent="@style/Theme.Sherlock"> 
    <item name="android:selectableItemBackground">@drawable/icon_place_selector</item> 
    <item name="android:actionBarItemBackground">@drawable/icon_place_selector</item> 
</style> 
+0

謝謝,但我想這個特定的選擇僅適用於一個菜單項,不是所有的人。 – gsingh2011

+0

對不起。我更新了我的答案。 –

+0

謝謝,我最終通過XML佈局做了類似的事情,但這很有幫助。 – gsingh2011

0

使用Actionbar style generator,風格你的風格和下載的zip文件

在下載的壓縮文件中,在「drawables」文件夾中打開selectable_background_xxxx.xml(xxxx - >賦予您自己的樣式的名稱)文件,並在按下狀態爲true時將drawable改爲九格img或顏色代碼。

<item android:state_pressed="true" android:drawable="@color/your_color" /> 
1

首先你要知道,如果你在你的全息風格,整個部件,即一鍵設置android:selectableItemBackground,纔會有這樣的背景下選擇。

如果你只是需要改變你的操作欄menuitem的圖標選擇器背景,下面是一個簡單的答案!

只需在您的holo風格設置android:actionBarItemBackground

<style name="AppTheme.Dark" parent="android:Theme.Holo"> 
    <item name="android:actionBarItemBackground">@drawable/item_background_holo_light</item> 
</style> 

希望它有幫助:-)

相關問題