首页
登录 | 注册

第三章:深入文本(3)

颜色结构
在内部,Color结构以两种不同的方式存储颜色:
  •  作为类型为double的红色,绿色和蓝色(RGB)值,范围从0到1.名为R,G和B的只读属性公开这些值。
  • 作为类型为double的色调,饱和度和亮度值,其范围也是从0到1.这些值用只读属性(名为Hue,Saturation和Luminosity)进行曝光。
Color结构还支持用于指示不透明度的Alpha通道。 名为A的只读属性公开此值,其范围从透明为0到不透明为1。
所有定义颜色的属性都是只读的。 换句话说,一旦Color值被创建,它就是不可变的。
您可以通过以下几种方法之一创建一个Color值。 三个构造函数是最简单的
  • new Color(double grayShade)
  • new Color(double r, double g, double b)
  • new Color(double r, double g, double b, double a)
参数的范围可以从0到1.颜色还定义了几种静态创建方法,包括:
 Color.FromRgb(double r, double g, double b)
Color.FromRgb(int r, int g, int b)
Color.FromRgba(double r, double g, double b, double a)
Color.FromRgba(int r, int g, int b, int a)
Color.FromHsla(double h, double s, double l, double a)
具有整数参数的两个静态方法假定值的范围从0到255,这是RGB颜色的惯例表示。 在内部,构造器简单地将整数值除以255.0以转换为double。
小心! 你可能会认为你正在用这个调用创建一个红色:


  1. Color.FromRgb(1, 0, 0)
但是,C#编译器将假定这些参数是整数。 整数FromRgb方法将被调用,第一个参数将被除以255.0,结果几乎为零。 如果要调用具有双重参数的方法,请明确指出。

  1. Color.FromRgb(1.0, 0, 0)
Color还为字符串中的打包uint格式和十六进制格式定义了静态创建方法,但是这些方法的使用频率较低。
Color结构还定义了Color类型的17个公共静态只读字段。 在下表中,Color结构在内部用来定义这些字段的整数RGB值与相应的Hue,Saturation和Luminosity值一起显示,为了清晰起见,这些值有点圆整:

除了Pink之外,您可能会将其识别为HTML中支持的颜色名称。 第18个公共静态只读字段被命名为Transparent,其中R,G,B和A属性都设置为零。
当人们有机会交互地制定颜色时,HSL颜色模型通常比RGB更直观。 色调循环通过可见光谱(和彩虹)的颜色,以0开始,红色开始,0.33绿色,0.67开始蓝色,1开始回到红色。
“饱和度”指示颜色中色调的程度,范围从0(完全没有色调并且导致灰色阴影)到1(完全饱和)。
亮度是亮度的度量,从黑色的0到白色的1。
第15章“交互式界面”中的颜色选择程序让您更加交互地探索RGB和HSL模型。
颜色结构包括几个有趣的实例方法,允许创建新的颜色,修改现有的颜色:

  • AddLuminosity(double delta)
  • MultiplyAlpha(double alpha)
  • WithHue(double newHue)
  • WithLuminosity(double newLuminosity)
  • WithSaturation(double newSaturation)
最后,Color定义了Color类型的两个特殊的静态只读属性
  • Color.Default
  • Color.Accent
Color.Default属性在Xamarin.Forms中用于定义视图的默认颜色。 VisualElement类将其BackgroundColor属性初始化为Color.Default,Label类将其TextColor属性初始化为Color.Default。
但是,Color.Default是一个Color值,其R,G,B和A属性都设置为-1,这意味着它是一个特殊的“模拟”值,它本身没有任何意义,但表示实际值是平台特定的
对于Label和ContentPage(以及大多数派生自VisualElement的类),Color.Default的BackgroundColor设置表示透明。您在屏幕上看到的背景颜色是页面的背景颜色。页面的BackgroundColor属性默认设置为Color.Default,但是该值在不同的平台上有不同的含义.Label的TextColor属性的Color.Default的含义也取决于设备。
以下是页面的BackgroundColor和Label的TextColor隐含的默认配色方案:

在Android,Windows和Windows Phone设备上,您可以为应用程序更改此配色方案。看下一节。
您可以使用多种可能的颜色处理策略:您可以选择以非平台独立的方式进行Xamarin.Forms编程,并避免对任何手机的默认颜色方案作出任何假设。或者,您可以使用有关各种平台颜色方案的知识,并使用Device.OnPlatform指定平台特定的颜色。
但是不要试图忽略所有的平台默认值,并将你的应用程序中的所有颜色设置为你自己的颜色方案。这可能不会如你所愿,因为许多视图使用与操作系统的颜色主题相关的其他颜色,但不通过Xamarin.Forms属性公开。
一个简单的选项是使用Color.Accent属性替代文字颜色。在iPhone和Android平台上,这是一种在默认背景下可见的颜色,但不是默认的文本颜色。在Windows平台上,用户选择的颜色是颜色主题的一部分。
通过将TextColor设置为具有小于1的A属性的Color值,可以使文本变为半透明。但是,如果要使用默认文本颜色的半透明版本,请改用Label的Opacity属性。该属性由VisualElement类定义,默认值为1.对于不同的透明度,将其设置为小于1的值。


相关文章

  • 网络拓扑图上文本的巧妙应用
    在前端网页设计中,文本是重要的组成部分,那么在网络拓扑图中也是一样的,文本在网络拓扑图上最基本的显示功能之一,在不同的应用场景下,会有不同的需求.但是不同的需求也逃不过一些基础设置,如位置.旋转.字体.颜色等需求.接下来我们就来详细聊聊 H ...
  • "1 您不用压货,零库存,我们为您一件代发.2 本公司以批发为主,利润低薄,量大从优 .3 本厂鞋子自主生产,不打标不贴牌4 退换货7天退15天换,要求:(1)不影响二次销售.(2)不收过季产品5 气味.色差.配饰易掉.不明显处的 ...
  • android 国际化及文本渲染框架[0] --- java scope android 拥有一个比较复杂的国际化及文本渲染框架,包含有从java -> JNI -> C/C++ 的非常庞大的code. 在Java层,主要包含如 ...
  • CCNA学习指南 第三章 下载
    请转到 <my ccna book>目录下载全部章节 TCP/IP的历史要追溯到20世纪70年代中期,当时的ARPA(Advanced Research Projiect Agency-美国国防部高级计划研究局)启动了互联网(I ...
  • 镜像是Docker的三大核心概念之一.     Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的 ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.012 s.
京ICP备10005923号