自定义主题的Andr​​oid / Xamarin项目 - 操作栏的中心标题文本 [英] Custom theme in Android / Xamarin project - center Title text of Action Bar

查看:350
本文介绍了自定义主题的Andr​​oid / Xamarin项目 - 操作栏的中心标题文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在安卓/ Xamarin项目自定义主题。我不能做的是:

  • 设置标题中间(和删除图标)
  • 在与菜单选项(例如按钮设置)添加菜单按钮

我试着设置属性 - >重力中心,但没有奏效。

 < XML版本=1.0编码=UTF-8&GT?;
<资源>
  &所述;! - 应用于应用程序或活动的主题 - >
  <样式名称=AgrippaTheme
         父=@安卓风格/ Theme.Holo.Light.DarkActionBar>
    <项目名称=机器人:actionBarStyle> @风格/ MyActionBar< /项目>
  < /风格>

  <! - 动作条的风格 - >
  <样式名称=MyActionBar
         父=@安卓风格/ Widget.Holo.Light.ActionBar.Solid.Inverse>
    <项目名称=机器人:背景> @色/ main_orange_color< /项目>
    <项目名称=机器人:titleTextStyle> @风格/ AgrippaTheme.TitleTextStyle< /项目>
  < /风格>

  <! - 动作条TitleTextStyle风格 - >
  <样式名称=AgrippaTheme.TitleTextStyle父=@安卓风格/ TextAppearance.Holo.Widget.ActionBar.Title>
    <项目名称=机器人:文字颜色> @色/ main_black_color< /项目>
    <项目名称=安卓重力> center_vertical | center_horizo​​ntal< /项目>
  < /风格>
< /资源>
 

解决方案

您必须通过一个静态方法来做到这一点里面的一个静态类编程

 公共静态无效SetActionbarText(活动活动,文本字符串)
        {
            //设置自定义视图启用
            activity.ActionBar.SetHomeButtonEnabled(假);
            activity.ActionBar.SetIcon(Android.Resource.Color.Transparent);
            activity.ActionBar.SetDisplayShowCustomEnabled(真正的);
            activity.ActionBar.Title =;

            LinearLayout中的LinearLayout =新的LinearLayout(活动);
            linearLayout.SetGravity(GravityFlags.CenterVertical);
            LinearLayout.LayoutParams textViewParameters =
                新LinearLayout.LayoutParams(LinearLayout.LayoutParams.MatchParent,LinearLayout.LayoutParams.MatchParent);
            textViewParameters.RightMargin =(int)的(40 * activity.Resources.DisplayMetrics.Density);
            TextView的modelTitle =新的TextView(活动);
            modelTitle.Text =文本;
            modelTitle.Gravity = GravityFlags.Center;
            linearLayout.AddView(modelTitle,textViewParameters);
            ActionBar.LayoutParams actionbarParams =
                新ActionBar.LayoutParams(ActionBar.LayoutParams.MatchParent,ActionBar.LayoutParams.MatchParent);
            activity.ActionBar.SetCustomView(LinearLayout中,actionbarParams);
        }
 

请注意,您有文本的右边距尺寸的发挥。这个利润率应该是平等的宽度家图标(它的存在,但它是无形的)。

您可以添加右边的图标在menu.xml文件中添加它,在你的活动OnCreateOptionsMenu方法膨胀此XML文件。

I have custom theme in Android / Xamarin project. What I can't do is to:

  • set header to the middle (and remove icon)
  • add menu button with menu option (for example button settings)

I've tried with settings property -> gravity to center but it didn't work.

    <?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>

解决方案

You will have to do it programmatically via a static method inside a static class

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);
        }

Notice that you have to play with right margin dimension of the text. This margin should be equal as width of the home icon(it is there but it is invisible).

You can add the right icon adding it on a Menu.xml and inflating this xml file in the OnCreateOptionsMenu method of your activity.

这篇关于自定义主题的Andr​​oid / Xamarin项目 - 操作栏的中心标题文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆