按钮文本始终以大写形式显示

Posted

技术标签:

【中文标题】按钮文本始终以大写形式显示【英文标题】:Button text always showing in uppercase 【发布时间】:2018-05-12 17:23:10 【问题描述】:

在我的 xamarin 表单中,项目按钮文本始终以大写格式显示。 但我在 xaml 中提供大写和小写字母。当我构建解决方案时,所有字母都变为大写。

【问题讨论】:

【参考方案1】:

我猜你会在 android 上看到它,因为它是按钮文本的默认设置,并且从 Lollipop 开始就一直如此。

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

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

【讨论】:

是的,我刚刚在“MyTheme”样式中添加了上面的行,该样式已经存在于 styles.xml 文件中。 我的项目中也有相同的代码,例如:&lt;style name="MainTheme" parent="MainTheme.Base"&gt;&lt;item name="android:textAllCaps"&gt;false&lt;/item&gt;&lt;/style&gt;。但它不起作用..! 我认为此评论是使用按钮属性 TextTransform github.com/xamarin/Xamarin.Forms/issues/… 的实际答案 这对我有用,使用 RohitSharma 评论中的确切代码 这个答案已经过时了。 Xamarin 4.8 引入了TextTransform,它更简单地解决了这个问题。【参考方案2】:

另一种方法是简单地使用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 > 中使用 &lt;Setter Property="TextTransform" Value="None" /&gt; 时没有 TextTransform 选项&lt;Style TargetType="Button"&gt;。我的 Visual Studio 是最新的。 @DannyBeckett i.stack.imgur.com/utqJt.png 您的目标是哪个平台?也许您使用的是旧版本的 Xamarin.Forms(我认为它是在 4.8 中引入的)。 我的 VS 简介页面显示 .NET 与 v4.8.04084 一样。 Xamarin 在 v16.7.000.463 上,Xamarin Designer 在 v16.7.0.495 上,Xamarin 模板在 v16.7.85 上,Xamarin.Android SDK 在 v11.0.2.0 上。我的共享项目属性的目标框架为 .NET Standard 2.0。 Android 项目属性的目标框架为 Android 9.0 (Pie)。 Android Manifest 的最低 Android 版本为 Android 4.1(API 级别 16 - Jelly Bean)。它的目标 Android 版本为 Android 9.0(API 级别 28 - Pie)。感谢您的帮助! @DannyBeckett 当我更新 Xamarin.Forms 时,它会抱怨一些警告,以便将目标框架设置为 Android Q 10.0。这是我们使用的版本之间的唯一区别。 我的 Xamarin.Forms NuGet 包位于 4.6.0.1141。我已将其更新为 4.8.0.1560,并且 TextTransform 属性现在可用。我不需要修改最低 Android 版本。再次感谢您:)【参考方案3】:

接受的答案假定用户(甚至是新手)知道上述代码采用哪种样式。即使接受答案下方的 cmets 仍然未回答...我想知道为什么...

我刚开始学习 Android Xamarin 编程,我花了 20 分钟的时间来弄明白。对于任何用户,特别是新手,请参阅此示例。

在您的 Android 项目中,转到 Resources > values > 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:我很久以前就停止了这些工作。您可能想查看在我之后发布的其他答案并涵盖最新版本?【参考方案4】:

最近我遇到了同样的问题,即使我在我的样式中使用了 textAllCaps false。 似乎它不适用于 Xamarin.Forms 的预发布版本 4.8.0.1238-pre3(发布此内容时的最新版本)。它确实适用于 Xamarin.Forms 版本 4.7.0.1239。

【讨论】:

同意。最新版本的 XF (4.8.0.1269) 不遵守 textAllCaps false 指令。我已经恢复到 4.7.0.1260 谢谢,您为我节省了一些徒劳的寻找修复方法 这里有一个问题和一个跟踪进度的解决方法:github.com/xamarin/Xamarin.Forms/issues/11556(显然修复计划用于 vNext - 5.0.0)【参考方案5】:

Visual 设置为“Material”时,此问题的解决方案适用于我在 android 和 ios 中的材料以避免自动大写字母转换。

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's answer 相同

以上是关于按钮文本始终以大写形式显示的主要内容,如果未能解决你的问题,请参考以下文章

iOS 键盘 - 大写“完成”按钮

ionic v4中的离子按钮,文本为大写

以大写形式快速显示 AM/PM

以编程方式将键盘大写锁定按钮设置为 ON? [复制]

GetKeyNameText 以大写形式返回名称

xamarin forms中的Button文本默认大写