博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
xamarin forms中的Button文本默认大写
阅读量:5088 次
发布时间:2019-06-13

本文共 2247 字,大约阅读时间需要 7 分钟。

问题来源

使用xamarin forms创建的android项目中,Button、Toolbar的右侧菜单按钮上的如果是字母的话,在android5.0以上,默认的文本都是大写,这种情况iOS项目不存在,是正常的显示。google公司把android的按钮文本默认大写,这个肯定和英语国家阅读习惯有关,但是iOS却是正常显示,有点难以解释google为什么将android的按钮文本默认成大写。问题如图:

1220420-20181117004658556-335989222.jpg

分析

其实这个问题的产生的原因还是因为 在5.0中在Button使用的Theme是这个,默认已经textAllCaps改为true了。

在android中我们只需要将按钮的属性textAllCaps都改为false就可以了,最好还是全局设置这个属性,直接在Activity的Theme中去设置就行了。

那在xamarin forms中如何解决呢?

解决方法

Button 和Toolbar的按钮文本都是默认的大写,问题的解决方式有两种,第一种是直接android项目中的MainActivity的Theme中去全局添加样式,

第二种方式在xamarin forms中使用Render这些UI,不管哪种方式都能解决,个人推荐既然要改变这种默认样式,还是直接在全局Theme中去设置样式吧。

1.android MainActivity的Theme修改样式textAllCaps

这个新建的xamarin forms项目中的android项目的默认的Theme,添加样式最后一行,这样可以修改Button和Toolbar的按钮文本默认大写,但是.......有个小问题,TabLayout的标题文本还是会默认大写,如下:

  
2.使用Render Button 设置属性textAllCaps

Render的目的就是自定义各平台的UI展现,相关的介绍如下:

https://docs.microsoft.com/zh-cn/xamarin/xamarin-forms/app-fundamentals/custom-renderer/renderers
render button的步骤如下:
step1:在forms的.net standard 项目中添加MyButton.cs ,继承xamarin forms 的Button。

using Xamarin.Forms;namespace DefaultUpperSample{    public class MyButton:Button    {    }}

step2 在android项目新建MyButtonRender.cs,修改默认属性。

继承ViewRenderer时一定要重写OnElementChanged方法,这个方法的作用是创建UI元素,会在UI初始化时调用。注意命名空间上的特性定义,iOS平台上不需要处理,就不用去处理。
[assembly: ExportRenderer(typeof(DefaultUpperSample.MyButton), typeof(DefaultUpperSample.Droid.MyButtonRender))]

[assembly: ExportRenderer(typeof(ButtonTextDefaultUpperSample.MyButton), typeof(ButtonTextDefaultUpperSample.Droid.MyButtonRender))]namespace DefaultUpperSample.Droid{    public class MyButtonRender:ButtonRenderer    {        protected override void OnElementChanged(ElementChangedEventArgs
e) { base.OnElementChanged(e); if (Control == null) { SetNativeControl(new Android.Widget.Button(Context)); } else { Control.SetAllCaps(false); } } }}

step3 在forms中使用如下:

效果图如下:

1220420-20181117005015513-1819580350.jpg

代码下载地址:

https://download.csdn.net/download/kebi007/10790030

总结

其实第一种方法直接在android里面写style更为靠谱,不用一个一个render ui,但是第一种方法会有一个问题,就是toolbar、button的文本修改样式textAllCaps可以解决默认大写的问题,但是TabLayout的标题文本却不能通过这个属性来解决,解决方式是一样的,这种文体在android中非常容易,一百度全都出来了,但是在xamarin forms中有时候总要走很多弯路。

转载于:https://www.cnblogs.com/zhangmumu/p/9972579.html

你可能感兴趣的文章
Extjs fieldText内容
查看>>
安装php7.2
查看>>
fiex布局实例
查看>>
构建之法阅读笔记01
查看>>
Item 2:Prefer C++-style casts.(More Effective C++)
查看>>
Delegation and Core Location(Chapter 4 of iOS Programming: The Big Nerd Ranch Guide)
查看>>
HDU 4001 To Miss Our Children Time dp
查看>>
mina 通讯框架
查看>>
vue表格业务
查看>>
maven 配置说明
查看>>
js接收网页参数
查看>>
linux之查看端口占用
查看>>
[原创]浅谈互联网金融测试平台规划
查看>>
什么是网关及网关作用(转)
查看>>
skymvc网站测试之mysql数据生成
查看>>
Asp.Net Core WebApi 和Asp.Net WebApi上传文件
查看>>
android脚步---如何看log之程序停止运行,和UI线程和非UI线程之间切换
查看>>
循环结构反思
查看>>
『TensorFlow』SSD源码学习_其一:论文及开源项目文档介绍
查看>>
EasyUI的时间控件禁止输入
查看>>