在SOUI中将自定义配置信息写到布局文件中

SOUI的布局XML文件保存布局必须的信息。特定场合中,用户可能会需要在布局中指定业务需要处理的属性。

比如启程输入法的皮肤。有的皮肤支持高分屏,有的皮肤不支持。对于这个场景,比较理想的方案是直接在皮肤的布局文件中指定当前皮肤是否支持高分屏。

程序解析到这个自定义属性再决定后续的逻辑。

下面是启程输入法皮肤的相关配置:

<SOUI 
  name="wnd_composition" 
  resizable="0" 
  wndType="normal"
  translucent="1"
  toolwindow="1"
>
  <user autoScale="true"/>
  <!-- .... -->
</SOUI>

注意上面的user结点。

这个结点,SOUI内核不会处理。

在界面初始化完成后,这些自定义的XML结点会通过调用SHostWnd::OnUserXmlNode这个虚函数传递到业务层。

业务层重载这个函数实现对自定义的属性的处理。

本文转载于网络 如有侵权请联系删除

相关文章

  • 我应该删除微软帐户密码吗?

    互联网时代,密码已成为生活中的必需品,每个人都有非常多密码,例如银行密码、社交账号密码、游戏账号密码等等。我们的数字生活大多数时候都依赖密码做安全保护,然而,密码本身的安全性却很差,原因主要有两方面:用户不擅长管理密码,会为了方便而使用弱密码。例如,很多人习惯用姓名+生日做密码,在多个平台上重复使用相同的密码。黑客可以利用很多技术或工具来偷取用户的密码。例如,使用密码字典攻击常用密码,发送钓鱼链接骗取用户“主动奉上”密码,借助GPU和大量云主机暴力破解密码。安全专家们老早就意识到依靠密码做身份验证并不理想,并且也一直在努力创造更安全的验证方式来代替密码。微软公司早在1999年就推出了Passport认证服务以尝试代替密码验证,但可能由于当时的技术水平有限,该服务存在严重的缺陷,在数年后被放弃了。十五年前,比尔盖茨也曾在RSA2006大会中发表安全演讲时指出:“让密码在三四年内开始退休”,但也迟迟未能真正实现。直到近日,微软终于正式宣布“杀死”密码,允许用户删除帐户密码。如何删除微软密码安装微软验证器(MicrosoftAuthenticator),并且链接到你的微软帐户登录微软帐户,打

  • 数字孪生体的魅力到底在哪里?

    随着新一代信息技术(如云计算、物联网、大数据等)与制造业的融合与落地应用,世界各国纷纷出台了各自的先进制造发展战略,如美国工业互联网和德国工业4.0,其目的之一是借力新一代信息技术,实现制造的物理世界和信息世界的互联互通与智能化操作,进而实现智能制造。数字孪生的意思是什么,可以把现实生活中很多无法在实物里面达到的实验效果通过虚拟的模式仿真的模式提前模拟出来。我们都知道苹果每一年都会开新的手机卖向市场,是从北美去设计手机原型机,拿到马来西亚和新加坡设计工艺,拿着工艺到中国找非标制造商做装备满足工艺。但是这些非标制造商也很苦恼,手机是全新的,工艺是全新的,设备也是全新的,没有参考可言,所以只能凭主观经验设计,如果三个月设计不出来,几千万损失是小事,耽误了苹果生产周期第一要赔偿,第二永远是黑名单。这就体现数字孪生必要性,所以在设备做之前会用软件做仿真和模拟,这就是数字孪生,如果非要把数字孪生分为三个阶段,第一个阶段物理融合,第二阶段数据融合,第三阶段叫模型融合。一,物理融合。用3D仿真软件做3D建模,把材质、位置、颜色、大小跟物理信息一比一建模的。二,数据融合。把虚拟体跟实物之间可以数字交互

  • Backlinko:语音搜索权威指南

    语音搜索:权威指南语音搜索现在是巨大的。而且它只会越来越大。问题是:您如何针对语音搜索优化您的网站?嗯,这正是您将在本指南中学习的内容。第1章:语音搜索革命有人说我们正处于“语音搜索革命”之中。这是真的……还是夸大其词?让我们看看最近的一些统计数据……41%的成年人(和55%的青少年)每天使用语音搜索(谷歌)。20%的Google移动查询是语音搜索(Google)。自2008年以来,语音搜索增长了35倍(KPCB)。统计数据描绘了一幅清晰的画面:语音搜索不是“下一件大事”。它已经在这里了。当你深入挖掘时,事情变得更加有趣......25%的Windows10桌面搜索是通过语音完成的(Branded3)。这个数据让我很惊讶。与流行的看法相反,语音搜索不仅适用于移动设备。越来越多的人开始使用他们的台式电脑和智能扬声器。说起…65%的GoogleHome或Amazonecho所有者“无法想象回去”(地理营销)。智能音箱是下一个冰箱——每个家庭都会有一个。随着越来越多的人使用智能音箱进行搜索,SEO将需要适应(更多内容请参见第3章)。ComScore预测,到2020年,50%的搜索将是语音搜索

  • MySQL与Redis缓存的同步方案

    来源:dongshao.blog.csdn.net/article/details/107190925本文介绍MySQL与Redis缓存的同步的两种方案通过MySQL自动同步刷新Redis,MySQL触发器+UDF函数实现解析MySQL的binlog实现,将数据库中的数据同步到Redis一、方案1(UDF)场景分析:当我们对MySQL数据库进行数据操作时,同时将相应的数据同步到Redis中,同步到Redis之后,查询的操作就从Redis中查找过程大致如下:在MySQL中对要操作的数据设置触发器Trigger,监听操作客户端(NodeServer)向MySQL中写入数据时,触发器会被触发,触发之后调用MySQL的UDF函数UDF函数可以把数据写入到Redis中,从而达到同步的效果方案分析:这种方案适合于读多写少,并且不存并发写的场景因为MySQL触发器本身就会造成效率的降低,如果一个表经常被操作,这种方案显示是不合适的演示案例下面是MySQL的表下面是UDF的解析代码定义对应的触发器二、方案2(解析binlog)在介绍方案2之前我们先来介绍一下MySQL复制的原理,如下图所示:主服务器操

  • SAP CRM product hierarchy和category的三个问题问答

    CreatedbyWang,Jerry,lastmodifiedonJan07,2017AllofthesethreequestionsareraisedregardingthecustomizingbelowviatcodeCOMM_PRAPPLCAT:Question1:Productsearchsupports“searchbycategoryid”.However,wecanassigndifferentcategorieswithsameidondifferentproducthierarchies.Seeexamplebelow:Question1:thecategoryidsearchwillonlytouchcategoriesassignedtoaspecifichierarchy,orwillsimplytouchallcategorieswithid“ZJERRY”regardlessoftheirassignedhierarchies? Wecanfirstcheckviatest. FirstIcreatetwoproductsbothassignedwith

  • @PathVariable和@RequestBody 和 @Requestparam和HttpServletRequest 的区别

    网上翻阅了很多博客,对这三种参数做了总结,如有不足指出,请在评论指出。@PathVariable绑定URI模板变量值@PathVariable是用来获得请求url中的动态参数的@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。//配置url和方法的一个关系*@RequestMapping(“item/{itemId}”)* @RequestParam注解@RequestParam接收的参数是来自HTTP请求体或请求url的QueryString中。RequestParam可以接受简单类型的属性,也可以接受对象类型。@RequestParam有三个配置参数:required表示是否必须,默认为true,必须。defaultValue可设置请求参数的默认值。value为接收url的参数名(相当于key值)。@RequestParam用来处理Content-Type为application/x-www-form-urlencoded编码的内容,Content-Type默认为该属性。@RequestParam也可用于其它类型的请求,例如:POST、DELETE等

  • Eureka Server

    介绍Eureka集群架构如下图所示:image.png从图中可以看出Eureka服务器提供服务注册与服务查找功能。多台服务器可以形成Eureka服务器集群,以提供高可用的服务。 Eureka服务器并没有提供后台的存储,这些注册的服务实例被保存在内存的注册中心,它们通过心跳来保持其最新状态,这些操作都可以在内存中完成。客户端存在着相同的机制,同样在内存中保存了注册表信息,这样的机制提升了Eureka组件的性能,每次服务的请求都不必经过服务器端的注册中心。构建服务器在maven的pom.xml文件中加入如下代码:<!--用于解决maven的多继承问题--> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Edgware.SR

  • 使用@Valid+BindingResult进行controller参数校验

    链接:https://www.jianshu.com/p/9e33ec934ff0

  • python excel 的相关操作

    source:http://www.2cto.com/kf/201208/145583.html 因为经常用到对excel的相关操作,今天就在此总结相关内容,方便大家参考。 python操作excel除了读就是写。 从读开始 xlrdhttp://pypi.python.org/pypi/xlrd 导入importxlrd 打开excelfile=xlrd.open_workbook('demo.xls') 查看文件中包含sheet的名称file.sheet_names() 得到第一个工作表,或者通过索引顺序或工作表名称sheet=file.sheets()[0]sheet=file.sheet_by_index(0)sheet=file.sheet_by_name(u'Sheet1') 获取行数和列数nrows=sheet.nrowsncols=sheet.ncols 循环行,得到索引的列表forrownuminrange(sheet.nrows):   printsheet.row_values(rownum) 获取整行和整列的值(数组)sheet.

  • MySQL MGR新增成员-xtrabackup

    4.6.在组复制中使用备份数据恢复失败的成员或增加新成员由于官方手册中使用了企业版的mysqlbackup做演示步骤,以下本节内容采用开源的percona-xtrabackup8.0.7版本演示对组成员数据的备份和恢复过程,如果有企业版的mysqlbackup需求,详情可参考链接:https://dev.mysql.com/doc/refman/8.0/en/group-replication-enterprise-backup.html备份组复制成员数据。备份组复制成员的数据类似于备份一个MySQL单实例。下面的演示步骤假设你已经了解了如何使用percona-xtrabackup8.0.7版本,否则,请自行参考在线手册:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html设置组中已经有3个组成员(node1、node2和node3),通过组中任意成员的performance_schema.replication_group_members表可以查询到组中的成员资格与状态信息,如下:root@localhost

  • linux集群下 solr集群搭建

    首先介绍一下系统架构:   *这个图中代表的是三个solr实例,每个实例包括两个core,组成一个solrcloud *索引集合包括两个shard(shard1和shard2),shard1和shard2分别由三个core组成,其中一个Leader两个Replication,Leader是由zookeeper选举产生,zookeeper控制每个shard上三个core的索引数据一致,解决高可用和高并发问题. *Collection在solrcloud集群中是一个索引结构,被划分为一个或多个shard(分片),shard之前使用相同的配置;比如对于商品信息搜索可以创建一个collection,collection=shard1+shard2+.....+shardX *Core提供索引和搜索服务,一个shard需要由一个或多个core组成,由于collection由多个shard组成,所以collection一般由多个core组成 * Master是master-slave结构中的主结点(通常说主服务器),Slave是master-slave结构中的从结点(通常说从

  • bzoj 3171: [Tjoi2013]循环格

    1#include<cstdio> 2#include<iostream> 3#include<cstring> 4#defineM10000 5#defineinf2139062143 6usingnamespacestd; 7intcnt=1,n,m,ans,T,d[M],q[2*M],f[M],head[M],next[10*M],u[10*M],v[10*M],w[10*M],fro[10*M],fr[M]; 8intmp[100][100],xx[4]={0,0,1,-1},yy[4]={-1,1,0,0}; 9voidjia1(inta1,inta2,inta3,inta4) 10{ 11cnt++; 12next[cnt]=head[a1]; 13head[a1]=cnt; 14fro[cnt]=a1; 15u[cnt]=a2; 16v[cnt]=a3; 17w[cnt]=a4; 18} 19voidjia(inta1,inta2,inta3,inta4) 20{ 21jia1(a1,a2,a3,a4); 22jia1(a2,a1,0,

  • [Dijkstra寻路算法]基于Unity简单实现Dijkstra寻路算法

    写在前面:不好意思,我又来发文章了:> 这个只是基于我做的A*寻路加了Dijkstra算法的逻辑 以下观点,均属个人,慎重参考 [A*算法]基于Unity实现A*算法(二) ==================================================================================== Dijkstra算法     Dijkstra算法好比在水中丢入一个石子,石子落点是起点,然后涟漪为获取寻路点,直到涟漪碰到目标点,寻路结束(只可大概意会) 代码介绍           和A*代码区别就是获取最近点,Dijkstra算法是按照GValue进行排序                 本来想录屏做个动图,但是mac的QQ录屏不灵啊啊啊啊啊。。。。。。     ==================================================================================== 想写点什么,但是发现的确没啥可以写的,我理解的好

  • 【BZOJ 1005】 1005: [HNOI2008]明明的烦恼 (prufer数列+高精度)

    1005:[HNOI2008]明明的烦恼 TimeLimit: 1Sec  MemoryLimit: 162MBSubmit: 4981  Solved: 1941 Description   自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input   第一行为N(0<N<=1000),接下来N行,第i+1行给出第i个节点的度数Di,如果对度数不要求,则输入-1 Output   一个整数,表示不同的满足要求的树的个数,无解输出0 SampleInput 3 1 -1 -1 SampleOutput 2 HINT   两棵树分别为1-2-3;1-3-2 Source     【分析】   先特判无解的情况。   假设$sum=\sum(d[i]-1)|[d[i]!=-1]$   $ss=\sum1[d[i]!=-1]$   则$Ans=C

  • 一道关于面向对象面试题所引发的血案(阿里)

    <!DOCTYPEhtml> <html> <head> <metacharset="UTF-8"/> <metahttp-equiv="X-UA-Compatible"content="ie=edge"/> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0" /> <title></title> <!--IMPORTCSS--> </head> <body> <!--IMPORTJS--> <script> functionFoo(){ getName=function(){ console.log(1); }; returnthis; } Foo.getName=function(){ console.log(2); }; Foo.prototype.getName=function(){ console.l

  • 关于mysql如何将查询出的数据导入导另一张表中

    要求:将从别的表查询出的数据插入到另一张表中,分为两种情况 1、将查询出的字段是另一张表的所有字段,SQL:insertinto表Aselect表A的字段from获取这些字段的数据源; 2、将查询出的字段插入到另一张表的部分字段,SQL:insertintostock_table(字段1,字段2...)values(select字段1,字段2...from数据源); 问题解决。

  • IBM WebSphere MQ常用操作

    IBMWebSphereMQ常用操作 队列管理器 dspmq 查看当前的队列管理器及状态 #dspmq QMNAME(QmgrName)STATUS(Running) 复制 runmqscQmgrName 进入某个队列管理器 QmgrName为队列管理器名称 对通道进行操作 dischl(*) 查看所有通道 dischs(*) 查看通道状态 dischs(*) AMQ8417I:DisplayChannelStatusdetails. CHANNEL(aaaa.bbbb)CHLTYPE(RCVR) CONNAME(xxx.xxx.xxx.xxx)CURRENT RQMNAME(QMUPMTSE)STATUS(RUNNING) SUBSTATE(RECEIVE) AMQ8417I:DisplayChannelStatusdetails. CHANNEL(bbbb.aaaa)CHLTYPE(SDR) CONNAME(xxx.xxx.xxx.xxx(port))CURRENT RQMNAME(QMUPMTSG)STATUS(RUNNING) SUBSTATE(MQGET)XM

  • 人造标准光源分类说明

    [转自百度百科] 人造的标准光源主要有如下10种类型:  模拟蓝天日光——D65光源色温:6500K  D65--国际标准人工日光(ArtificialDaylight)色温:6500K功率:18W  模拟北方平均太阳光——D75光源色温:7500K  模拟太阳光——D50光源色温:5000K  模拟欧洲商店灯光——TL84光源色温:4000K  TL84--欧洲、日本、中国商店光源色温:4000K功率:18W  模拟美国商店灯光——CWF光源色温:4100K  CWF--美国冷白商店光源(CoolWhiteFluorescent)色温:4150K功率:20W  模拟另一种美国商店灯光——U30光源色温:3000K  U30--美国暖白商店光源(WarmWhiteFluorescent)色温:3000K功率:20W  模拟指定的商店灯光——U35光源色温:3500K  U35--美国零售商塔吉特-Target指定对色灯管,色温3500k  模拟家庭酒店暖色灯

  • iOS:选择器控件UIPickerView的详解和演示

    选择器控件UIPickerView: 功能:它能够创建一个类似于密码锁式的单列或多列的选择菜单,用户可以通过它设置的代理来选择需要菜单中的任意的数据。例如创建日历、字体表(类型、大小、颜色)、图库等.   它是UIView视图的子类,而且遵从UIPickerViewDelegate协议和UIPickerViewDataSource协议。因此,选择器需要设置代理去进行操作; 设置视图控制器self为数据源代理和数据操作代理,即 @property(strong,nonatomic)UIPickerView*pickerView; self.pickerView.dataSource=self; self.pickerView.delegate =self;   一、具体类信息:  @protocol UIPickerViewDataSource, UIPickerViewDelegate;  @interface UIPickerView: UIView<NSCoding>  

  • 软件工程网络15 第二周作业-提出问题

    提出问题 快速通读教材《构建之法》,并参照提问模板,提出5个问题。 如何提出有价值的问题?请看这个文章:http://www.cnblogs.com/rocedu/p/5167941.html,以及在互联网时代如何提问题。还有这些要点: -在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文 -列出一些事例或资料,支持你的提问。 -说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾? 一个模板可以是这样: >我看了这一段文字(引用文字),有这个问题(提出问题)。我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。但是我还是不太懂,我的困惑是(说明困惑)。 或者这样: >我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 大学生应该能写出自己的思考,而不是摘抄书本内容。 提示:编程经验不多的同学,建议看16章“创新”,提出自己的问题。 复制 【附加题】:请将问题提交至豆瓣:https://book.douba

  • Templates

    Gametheory Nim #include<bits/stdc++.h> usingnamespacestd; intmain(){ intT; scanf("%d",&T); while(T--){ intn,x,res=0; scanf("%d",&n); while(n--){ scanf("%d",&x); res^=x; } puts(res==0?"No":"Yes"); } return0; } 复制 SGfunction 复制 Graphtheory SPFA voidspfa(intstart){ for(inti=1;i<=n;i++)dis[i]=INF,vis[i]=0; dis[start]=0; q[qhead=qtail=1]=start; while(qhead<=qtail){ intu=q[qhead++]; vis[u]=0; for(inti=head[u];i;i=e[i].next){ intv=e[i].to;

相关推荐

推荐阅读