2014-11-03 111 views
7

的中心标题文字我已经在安卓/ Xamarin项目自定义主题。我不能做的是:自定义主题 - 操作栏

  • 组头中间(和删除图标)

我试着菜单选项(例如按钮设置)

  • 添加菜单按钮与设置属性 - >重力居中,但它没有工作。

    Preview

    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
        <!-- the theme applied to the application or activity --> 
        <style name="AgrippaTheme" 
         parent="@android:style/Theme.Holo.Light.DarkActionBar"> 
        <item name="android:actionBarStyle">@style/MyActionBar</item> 
        </style> 
    
        <!-- ActionBar styles --> 
        <style name="MyActionBar" 
         parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> 
        <item name="android:background">@color/main_orange_color</item> 
        <item name="android:titleTextStyle">@style/AgrippaTheme.TitleTextStyle</item> 
        </style> 
    
        <!-- ActionBar TitleTextStyle styles --> 
        <style name="AgrippaTheme.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title"> 
        <item name="android:textColor">@color/main_black_color</item> 
        <item name="android:gravity">center_vertical|center_horizontal</item> 
        </style> 
    </resources> 
    
  • 回答

    10

    你将不得不通过一个静态方法来做到这一点编程的静态类中

    public static void SetActionbarText(Activity activity, string text) 
         { 
          // Setting custom view enable 
          activity.ActionBar.SetHomeButtonEnabled(false); 
          activity.ActionBar.SetIcon(Android.Resource.Color.Transparent); 
          activity.ActionBar.SetDisplayShowCustomEnabled(true); 
          activity.ActionBar.Title = ""; 
    
          LinearLayout linearLayout = new LinearLayout(activity); 
          linearLayout.SetGravity(GravityFlags.CenterVertical); 
          LinearLayout.LayoutParams textViewParameters = 
           new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MatchParent, LinearLayout.LayoutParams.MatchParent); 
          textViewParameters.RightMargin = (int)(40 * activity.Resources.DisplayMetrics.Density); 
          TextView modelTitle = new TextView(activity);   
          modelTitle.Text = text; 
          modelTitle.Gravity = GravityFlags.Center; 
          linearLayout.AddView(modelTitle,textViewParameters); 
          ActionBar.LayoutParams actionbarParams = 
           new ActionBar.LayoutParams(ActionBar.LayoutParams.MatchParent,ActionBar.LayoutParams.MatchParent); 
          activity.ActionBar.SetCustomView(linearLayout, actionbarParams); 
         } 
    

    请注意,您有与文本的右边距尺寸的发挥。此边距应与主图标的宽度相同(它在那里但不可见)。

    您可以添加右边的图标将其添加在menu.xml文件和膨胀您的活动的OnCreateOptionsMenu方法此XML文件。

    3

    您还可以使用菜单和款式的xml文件做到这一点。例如,要添加设置按钮,您可以在定义图片中显示的用户界面菜单的菜单文件中添加一个项目。有一些预定义的图标,如我使用过的图标(ic_menu_preferences),但您可以使用另一个图标或使用图像。所以,在,突然想到说agrippa_menu.xml:

    <?xml version="1.0" encoding="utf-8"?> 
    

    [...]

    <item 
        android:id="@+id/menu_item_settings" 
        android:title="@string/settings" 
        android:icon="@android:drawable/ic_menu_preferences" 
        android:showAsAction="ifRoom|withText" 
        app:showAsAction="ifRoom|withText"/> 
    

    [...]

    要骑关闭图标,您可以将此线添加到定义此用户界面的样式中,或者如果您尚未创建新线,可以创建一个新线。所以,在styles.xml:

    <style name="AgrippaTheme" parent="android:Theme.Holo.Light"> 
    
        <!--pre v11--> 
        <item name="logo">@color/transparent</item> 
        <!--post v11--> 
        <item name="android:logo">@color/transparent</item> 
        <!-- Customize your theme here. --> 
    </style> 
    

    最后,在参考把中间的标题,我haven't发现了另一种方式不是定义自定义XML操作栏和编程设置它喜欢它在这里说: Center Align title in action bar using styles in android.:。如果有人知道如何做到这一点,只用款式就会受到欢迎。