2011-11-24 42 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