2014-11-03 109 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.:。如果有人知道如何做到這一點,只用款式就會受到歡迎。