按钮文本始终显示为大写

31
在我的Xamarin.Forms项目中,按钮文本始终以大写格式显示。
但是我在XAML中提供了大写和小写字母。当我构建解决方案时,所有字母都会变成大写。
5个回答

52

我猜您在Android上看到了这个,因为它是按钮文本的默认值,自Lollipop以来就是如此。

要更改此行为,请将以下内容添加到styles.xml文件中,该文件可以在Android项目的资源资源文件夹下找到。

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

是的,我刚刚在“ MyTheme”样式中添加了上述行,而这一行已经存在于styles.xml文件中。<style name="MyTheme" parent="MyTheme.Base"> <item name="android:textAllCaps">false</item> </style> - Hardik Shah
4
我在我的项目中也有同样的代码,例如:<style name="MainTheme" parent="MainTheme.Base"><item name="android:textAllCaps">false</item></style>。但它不起作用..! - Rohit Sharma
3
我认为这条评论是使用按钮属性 TextTransform 的真正答案。https://github.com/xamarin/Xamarin.Forms/issues/11556#issuecomment-670677728 - Madhav Shenoy
这对我来说可行,使用RohitSharma评论中的确切代码。 - Danny Beckett
这个答案已经过时了。Xamarin 4.8引入了“TextTransform”,它可以更简单地解决这个问题。 - BlueRaja - Danny Pflughoeft

20

另一种方法是简单地使用TextTransform属性:

<Button Text="Click Me" TextTransform="None"/>

或者在样式定义中:

<Style TargetType="Button" x:Key="NoDefaultCapsButton">
     <Setter Property="TextTransform" Value="None"/>
</Style>

<Button Text="Click Me" Style="{x:StaticResource NoDefaultCapsButton}"/>

重要提示

请确保使用的是Xamarin.Forms NuGet包4.8.0.1534或更高版本,如果TextTransform未显示,则清理并重新构建您的解决方案。


你在哪里看到这个选项?我正在使用 Visual Studio Pro 2019 和一个新的 Xamarin.Forms 项目,但是在我的 Button 的属性窗口中或者尝试在 App.xaml > ApplicationResources > <Style TargetType="Button"> 中使用 <Setter Property="TextTransform" Value="None" /> 时都没有 TextTransform 选项。我的 Visual Studio 已经更新到最新版本了。 - Danny Beckett
我的VS关于页面显示.NET版本为v4.8.04084。Xamarin版本为v16.7.000.463,Xamarin Designer版本为v16.7.0.495,Xamarin Templates版本为v16.7.85,Xamarin.Android SDK版本为v11.0.2.0。我的共享项目属性的目标框架为.NET Standard 2.0。Android项目属性的目标框架为Android 9.0(Pie)。Android清单的最低Android版本为Android 4.1(API级别16 - Jelly Bean)。它的目标Android版本为Android 9.0(API级别28 - Pie)。感谢您的帮助! - Danny Beckett
@DannyBeckett 当我升级Xamarin.Forms后,它会发出一些警告,要求将目标框架设置为 Android Q 10.0。这是我们使用版本之间唯一的区别。 - Cfun
我已经在两个地方将我的目标框架更改为Android 10.0(API级别29-Q),但不幸的是仍然没有成功!你的最低Android版本是Android 4.1(API级别16-Jelly Bean)吗?感谢你的尝试。 - Danny Beckett
1
我的Xamarin.Forms NuGet包原本是4.6.0.1141版本。我已将其更新至4.8.0.1560版本,现在TextTransform属性可用了。我不需要修改最低Android版本。再次感谢您的帮助 :) - Danny Beckett
显示剩余3条评论

12

接受的答案假设用户(即使是新手)知道上面的代码应该放在哪个样式中。即使是下面已接受的答案的评论仍然没有被回答...我想知道为什么...

我刚开始学习Android Xamarin编程,花了大约20分钟才弄明白它。对于任何用户,尤其是新手,请参考此示例。

在您的Android项目中,进入 Resources &gt; values &gt; styles.xml 并添加:

<style name="MyTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:textAppearanceButton">@style/mybutton.text</item>
</style>

<style name="mybutton.text" parent="Base.TextAppearance.AppCompat.Button">
    <item name="android:textAllCaps">false</item>
</style>

截图:


我尝试了这个,但没有效果。我只需要将你的文本复制到myapp.Android/Resources/values/styles.xml中,是吗?在此之前,我需要执行某些操作吗? - GuidoG
@GuidoG:我很久以前就停止了这些工作。你可能想看看其他回答,它们是在我的之后发布的,也涵盖了最新版本? - Siddharth Rout

7

最近我遇到了同样的问题,尽管我在样式中使用了textAllCaps false。看起来它与Xamarin.Forms的prerlease版本4.8.0.1238-pre3不兼容(发布本文时为最新版本)。但在Xamarin.Forms 4.7.0.1239版本中可以正常工作。


1
同意。XF的最新版本(4.8.0.1269)不遵循textAllCaps false指令。我已经回滚到4.7.0.1260。 - pionium
谢谢,你帮我省去了一些无用的寻找解决方法的时间。 - Philip
1
以下是关于跟踪进度的问题和解决方法:https://github.com/xamarin/Xamarin.Forms/issues/11556(显然,修复计划在下一个版本 - 5.0.0中进行)。 - Morgan Touverey Quilling

0

针对在 Android 和 iOS 上遇到的问题,当 Visual 设置为 "Material" 时,避免自动转换为大写字母的解决方案。

Xamarin.Forms.Android:

<style name="MainTheme" parent="MainTheme.Base">
    <item name="android:textAllCaps">false</item>
</style>

Xamarin.Forms.iOS:

[assembly: ExportRenderer(typeof(Button), typeof(ButtonRendererEx), new[] { typeof(VisualMarker.MaterialVisual) })]
namespace GettingStarted.iOS
{
    public class ButtonRendererEx : MaterialButtonRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                Control.UppercaseTitle = false;
            }
        }
    }
}

我认为使用CustomRenderer来完成这个任务有些过度设计了。对于Android部分的答案,它与Steve的答案相同。 - Cfun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接