在 Android 上从 Xamarin Forms 制作按钮混合大小写

问题描述 投票:0回答:3

我是 Xamrin 新手。我正在尝试构建一个 Xamarin Forms 应用程序(尽可能少地原生)以在 Android 和 IOS 上运行。

我正在 Android 模拟器中运行,即使我指定混合大小写的文本,所有按钮都有大写文本。

我发现很多页面都说要将以下内容添加到 styles.xml:

<item name="android:textAllCaps">false</item>

还有另一个引用:

<item name="textAllCaps">false</item>

不过,根据 styles.xml 中的文档,似乎发生了一些更改,所以我添加了它,现在看起来像这样:

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

  <style name="MainTheme" parent="MainTheme.Base">
    <!-- As of Xamarin.Forms 4.6 the theme has moved into the Forms binary -->
    <!-- If you want to override anything you can do that here. -->
    <!-- Underneath are a couple of entries to get you started. -->

    <!-- Set theme colors from https://aka.ms/material-colors -->
    <!-- colorPrimary is used for the default action bar background -->
    <!--<item name="colorPrimary">#2196F3</item>-->
    <!-- colorPrimaryDark is used for the status bar -->
    <!--<item name="colorPrimaryDark">#1976D2</item>-->
    <!-- colorAccent is used as the default value for colorControlActivated
         which is used to tint widgets -->
    <!--<item name="colorAccent">#FF4081</item>-->
    <item name="textAllCaps">false</item>
    <item name="android:textAllCaps">false</item>
  </style>
</resources>

但是当我运行模拟器时,它会以全部大写形式显示所有按钮文本。

我不知道还能尝试什么。

android xamarin button xamarin.forms
3个回答
0
投票

您可以为按钮创建自定义渲染器并将 SetAllCaps 设置为 false 并尝试。

这是代码:

public class CustomButtonRenderer : ButtonRenderer
{
    public CustomButtonRenderer(Context context) : base(context)
    {
    }

    protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
    {
        base.OnElementChanged(e);

        if (e.OldElement != null)
        {
            // Cleanup
        }

        if (e.NewElement != null)
        {
           var button = (Button)this.Control; 
           button.SetAllCaps(false);
        }
    }
}

0
投票

我测试了一下,发现问题与

Xamarin.Forms
的版本有关。

  • 如果您使用的是 Xamarin.Forms 4.6,您之前提到的解决方案就可以解决问题,我们只需将

    <item name="android:textAllCaps">false</item>
    添加到
    style.xml
    即可。

  • 如果您使用的是最新版本(4.8),上面的解决方案不起作用,我们需要为 Button 创建自定义渲染器,请将代码复制到您的 Android 项目中。

    [assembly: ExportRenderer(typeof(Xamarin.Forms.Button), typeof(MyRenderer))]
      namespace YourNameSpace.Droid
      {
          class MyRenderer : ButtonRenderer
          {
              public MyRenderer(Context context) : base(context)
              {
              }
    
              protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
              {
                  base.OnElementChanged(e);
                  if (e.OldElement != null)
                  {
                      // Cleanup
                  }
    
                  if (e.NewElement != null)
                  {
                      Control.SetAllCaps(false);
                  }
              }
          }
      }
    

0
投票

在 xaml 控件中使用 TextTransform 属性为 None

© www.soinside.com 2019 - 2024. All rights reserved.