我是 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>
但是当我运行模拟器时,它会以全部大写形式显示所有按钮文本。
我不知道还能尝试什么。
您可以为按钮创建自定义渲染器并将 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);
}
}
}
我测试了一下,发现问题与
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);
}
}
}
}
在 xaml 控件中使用 TextTransform 属性为 None