原创文章,转载请注明: 转载自http://www.yiiyaa.net/
0、jQuery Mobile生命周期函数必须在 jQuery Mobile脚本加载之前声明,否则会完全不起作用!
拿“mobileinit”来说,我一开始的时候这样写,坑爹的是jqm根本没有任何反应!
<script src="/blog_article/Jquery.js"></script>
<script src="/blog_article/Jquery-mobile.js"></script>
<script type="text/javascript">
$(document).bind("mobileinit", function(){
alert("jquery mobile");
});
</script>
正确的写法:
<script src="/blog_article/Jquery.js"></script>
<script type="text/javascript">
$(document).bind("mobileinit", function(){
alert("jquery mobile");
});
</script>
<script src="/blog_article/Jquery-mobile.js"></script>
1、在列表项和按钮上禁用文本截断
如果你的列表项或者按钮上是一个很长的文本,它将会被jQuery Mobile自动截断,要禁用这个截断设置,需要在CSS选择器上添加属性"white-space:normal"。例如,在按钮禁止截断:
.ui-btn-text{
white-space:normal;
}
在列表项上禁止截断:
.ui-li-desc{
white-space:norma;
}
应用自动截断,在元素上面设置"white-space:normal:nowrap"。
2、在页面加载时随机显示背景
jQuery Mobile拥有一系列在页面加载时触发的初始化事件,下面是每次页面加载完成后随机显示一个背景。
CSS如下:
.my-page { background: transparent url(/images/bg.jpg) 0 0 no-repeat; }
.my-page.bg1 { background: transparent url(/images/bg-1.jpg) 0 0 no-repeat; }
.my-page.bg2 { background: transparent url(/images/bg-2.jpg) 0 0 no-repeat; }
.my-page.bg3 { background: transparent url(/images/bg-3.jpg) 0 0 no-repeat; }
JavaScript如下:
$('.my-page').live("pagecreate", function() {
var randombg = Math.floor(Math.random()*4); // 0 to 3
$('.my-page').removeClass().addClass('bg' + randombg);
});
3、禁用按钮
$('#home-button').button("disable");
设置按钮可用
$('#home-button').button("enable");
4、禁止加载时弹出信息
每次加载一个不同的页面时都会触发弹出消息,确实很烦人,要禁用这种情况的发生,添加如下代码
$.mobile.pageLoading(true);
默认情况下是可见的
$.mobile.pageLoading();
5、自定义主题
jQuery Mobile框架有5款主题,主题A,主题B,主题C,主题D和主题E。但你也可以轻松为你的web app
创建一个主题。步骤如下:
(1)从jQuery Mobile CSS文件中复制任何一个主题粘贴到你自己的CSS文件中。
(2)给你的主题和CSS选择器合理命名。例如,你复制了主题C,而你想命名你的主题为主题Z,重命名.ui-btn-up-c为.ui-btn-up-z等等。
(3)、修改自定义主题的颜色和样式
(4)、应用你的自定义主题到任一元素上,仅需设置data-theme属性为z,例如:
<div data-role="page" data-theme="z">
6、应用自定义字体
你当用jQuery Mobile构建一个web app时,想用一些特殊字体,你会发现用@font-face自定义字体是一个令人相当满意的方法。
7、创建一个没有文本只有图片的按钮
有时,你可能想用一个没有文本内容仍具有按钮特性的一个按钮。要在按钮上隐藏文本,设置data-iconpos="notext",例如:
<a href="/index.html" data-icon="grid" claa="ui-btn-right" data-iconpos="notext">Home</a>
8、打开一个无需使用Ajax页面过渡的超链接
<a href="/index.html" data-icon="grid" rel="external">Home</a>
9、移除项目列表中的箭头
默认情况下,jQuery Mobile框架会为每一个列表项添加一个箭头,想要禁用箭头显示,需要在你想要移除列表项设置data-icon="false"。
<li data-icon="false"><a href="/blog_article/contact.html">Contact Us</a></li>
10、设置页面的背景颜色
怎样在不修改jQuery Mobile样式下设置一个页面背景颜色的?听起来很简单,其实需要花几分钟时间才能解决。通常情况下,你需要在body元素中设置背景颜色,但是用jQuery Mobil框架,你需要设置在ui-page类中。
.ui-page{
background:#eee;
}
首先两个方法都是异步执行。layoutSubviews方便数据计算,drawRect方便视图重绘。
2、addSubview会触发layoutSubviews。
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化。
4、滚动一个UIScrollView会触发layoutSubviews。
5、旋转Screen会触发父UIView上的layoutSubviews事件。
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。
2、该方法在调用sizeToFit后被调用,所以可以先调用sizeToFit计算出size。然后系统自动调用drawRect:方法。
3、通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:。
4、直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,但是有个前提条件是rect不能为0。
以上1,2推荐;而3,4不提倡
2、若使用calayer绘图,只能在drawInContext: 中(类似于drawRect)绘制,或者在delegate中的相应方法绘制。同样也是调用setNeedDisplay等间接调用以上方法
3、若要实时画图,不能使用gestureRecognizer,只能使用touchbegan等方法来调用setNeedsDisplay实时刷新屏幕
//选择模版 XmlDocument largeTileData = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWidePeekImage01); //添加文字说明 XmlNodeList largetextdata = largeTileData.GetElementsByTagName("text"); XmlNodeList imagedata = largeTileData.GetElementsByTagName("image"); largetextdata[0].InnerText = "F#ck Day!"; largetextdata[1].InnerText = "What a F#cking Day?"; //设置图片 ((XmlElement)imagedata[0]).SetAttribute("src","ms-appx:///images/1024.png"); //微标 文字以及图片 XmlDocument smalltiledate = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquarePeekImageAndText02); XmlNodeList smallTileText = smalltiledate.GetElementsByTagName("text"); XmlNodeList smallTileImage = smalltiledate.GetElementsByTagName("image"); smallTileText[0].InnerText = "Cao Egg"; smallTileText[1].InnerText = "I'm F#cker in there"; ((XmlElement)smallTileImage[0]).SetAttribute("src", "ms-appx:///images/1024.png"); //合并两个到一个<visual> XML节点 IXmlNode newNode = largeTileData.ImportNode(smalltiledate.GetElementsByTagName("binding").Item(0), true); largeTileData.GetElementsByTagName("visual").Item(0).AppendChild(newNode); //创建通知 TileNotification notification = new TileNotification(largeTileData); //多少秒以后移除 notification.ExpirationTime = DateTimeOffset.UtcNow.AddSeconds(30); //发送通知 TileUpdateManager.CreateTileUpdaterForApplication().Update(notification);
精简
XmlDocument tileData = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquareBlock); XmlNodeList textData = tileData.GetElementsByTagName("text"); textData[0].InnerText = "10"; textData[1].InnerText = "Days of Me"; TileNotification notification = new TileNotification(tileData); //为通知设置到期时间 //默认情况下,本地磁贴和锁屏提醒不会过期,推送通知、定期通知、激活通知会在三天之后过期。 //最好通过使用一个对你的应用有意义的时间设置过期时间,对于本地磁贴和锁屏提醒通知尤其如此。 //磁贴内容的保留时间应不长于内容具有相关性的时间。 //在这种情况下,该通知将在十分钟内到期并从磁贴中删除。 notification.ExpirationTime = DateTimeOffset.UtcNow.AddSeconds(20); TileUpdateManager.CreateTileUpdaterForApplication().Update(notification);
计划磁贴通知
//指定模板 TileTemplateType tileTemplate = TileTemplateType.TileWideImageAndText01; XmlDocument tileXml = TileUpdateManager.GetTemplateContent(tileTemplate); //提供通知内容 //设置文字 XmlNodeList tileTextAttributes = tileXml.GetElementsByTagName("text"); tileTextAttributes[0].InnerText = "Hello"+Guid.NewGuid().ToString().Substring(0,5)+" World!!!!!"; //设置图片 XmlNodeList tileImageAttributes = tileXml.GetElementsByTagName("image"); ((XmlElement)tileImageAttributes[0]).SetAttribute("src", "ms-appx:///images//1024.png"); ((XmlElement)tileImageAttributes[0]).SetAttribute("alt", "red graphic"); //小瓷贴模版。 XmlDocument squareTileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquareText04); //设置文字 XmlNodeList squareTileTextAttributes = squareTileXml.GetElementsByTagName("text"); squareTileTextAttributes[0].AppendChild(squareTileXml.CreateTextNode("Hello " + Guid.NewGuid().ToString().Substring(0, 5) + " World。。。。")); //绑定 IXmlNode node = tileXml.ImportNode(squareTileXml.GetElementsByTagName("binding").Item(0), true); //插入 tileXml.GetElementsByTagName("visual").Item(0).AppendChild(node); //指定应传递通知的时间 //Int16 dueTimeInHours = 3; //DateTime dueTime = DateTime.Now.AddHours(dueTimeInHours); DateTime dueTim1e = DateTime.Now.AddSeconds(10); //创建计划的磁贴通知对象 ScheduledTileNotification scheduledTile = new ScheduledTileNotification(tileXml, dueTim1e); //为计划的磁贴通知赋予 ID scheduledTile.Id = "Future_Tile"; //向计划中添加磁贴通知。 TileUpdateManager.CreateTileUpdaterForApplication().AddToSchedule(scheduledTile);
磁贴通知队列
//设置选项以启用通知循环 TileUpdateManager.CreateTileUpdaterForApplication().EnableNotificationQueue(true); //创建磁贴通知 TileUpdateManager.GetTemplateContent(TileTemplateType.TileWideImageAndText01); XmlDocument tileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquareBlock); // TODO: Fill in the template with your tile content. // TODO: Define a square tile and add it to tileXML. TileNotification tileNotification = new TileNotification(tileXml); /* * 启用队列时,最多可在磁贴上自动循环显示五个磁贴通知。 * 默认情况下,队列中通知的替换策略是先进先出 (FIFO); * 当队列排满且到达新通知时,最早的通知将被删除。 * 请注意,通知显示顺序不遵守严格的线性模式。 * 用户可看到通知的顺序与其到达时的顺序并不相同。 */ //授予通知标记 tileNotification.Tag = "stockMSFT"; //向磁贴发送通知 TileUpdateManager.CreateTileUpdaterForApplication().Update(tileNotification);
清除磁贴通知
Windows.UI.Notifications.TileUpdateManager.CreateTileUpdaterForApplication().Clear();
参考实例:http://code.msdn.microsoft.com/windowsapps/app-tiles-and-badges-sample-5fc49148/