2011-11-24 40 views
1

下面是相關主題http://developer.android.com/guide/topics/ui/actionbar.html#ActionItemsAndroid 3.0的:不能風格的動作欄的操作項按鈕

開發者指南因此,我們必須在活動

public class MyActivity extends Activity { 

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    switch (item.getItemId()) 
    { 
    case R.id.first_menu_button: 
     return true; 
    case R.id.second_menu_button: 
     return true; 

    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

哪裏R.menu.my_menu是

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/first_menu_button" 
     android:showAsAction="always" 
     android:icon="@drawable/btn_first"/> 
    <item 
     android:id="@+id/second_menu_button" 
     android:showAsAction="always" 
     android:icon="@drawable/btn_second"/> 
</menu> 

風格的按鈕http://developer.android.com/guide/topics/ui/actionbar.html#ActionItemStyles說我們應該使用android:actionButtonStyle屬性。我已經做了這樣的:

在清單:

<activity android:name="com.root.test.MyActivity" 
    android:theme="@style/CustomActionBarStyle" 
</activity> 

在styles.xml:

<style name="CustomActionBarStyle" parent="@android:style/Theme.Holo.Light"> 
    <item name="android:actionButtonStyle">@style/customActionButtonStyle</item> 
    <item name="android:windowActionBar">true</item> 
    <item name="android:windowNoTitle">false</item> 
</style> 

<style name="customActionButtonStyle" parent="@android:style/Widget.Holo.Light.ActionButton"> 
    <item name="android:[...] 
</style> 

問題是,無論我在寫customActionButtonStyle,它只是忽略它。 CustomActionBarStyle作品中的其他作品(更爲複雜,爲了簡單起見,它們只是省略)。我的主要內容是設置自定義填充。有沒有其他方法可以做到這一點,就像其他的一樣,不是android:actionButtonStyle屬性?或者有人知道如何獲得這項工作? (僅在3.1中添加了android:abItemPadding屬性)

謝謝。

回答

0

大多數樣式元素都可以工作,但填充由用於生成操作按鈕的系統佈局提供,可能不會達到您的預期效果。爲了UX的一致性,大多數操作欄度量標準(如填充和邊距)通常應單獨保留。即使是您記下的項目填充屬性,也可能是想要使用它來設置自定義操作視圖的應用程序的信息。

+0

所以沒有辦法來設置這些參數programaticly這樣的成分,唯一的辦法就是使用一些其他構建元素? – Aleksey

+0

不是沒有一些非常可惡的黑客攻擊,很可能會從版本到版本。 :)就像我說過的,爲了與系統的其他部分保持一致,你應該保留這些東西。 – adamp

+0

謝謝你的解釋 – Aleksey

4

如果要更改文本大小,顏色或樣式等文本參數,必須使用actionMenuTextAppearance。這裏是我的ActionBarSherlock代碼:

<item name="actionMenuTextAppearance">@style/MyProject.ActionMenuTextAppearance</item> 
<item name="android:actionMenuTextAppearance">@style/MyProject.ActionMenuTextAppearance</item> 

... 

<style name="MyProject.ActionMenuTextAppearance" parent="TextAppearance.Sherlock.Widget.ActionBar.Menu"> 
    <item name="android:textSize">15sp</item> 
    <item name="android:textStyle">normal</item> 
    <item name="android:textAllCaps">false</item> 
</style> 

編輯:這是我styling action bar與ActionBarSherlock模板:https://github.com/petrnohejl/Android-Templates-And-Utilities/tree/master/Res-Theme-Holo-Deprecated