AndroLua学习(3) —— Activity

Activity 回调方法
1、mian(…)

function main(...)
  print("入口函数",...)
end

…表示可变参数,这里是newActivity传递过来的参数

2、onCreate() 窗口创建
3、onStart() Activity开始
4、onResume() 返回程序
5、onPause() Activity暂停
6、onStop() Activity停止
7、onDestroy() 程序退出
8、onResult(name,…) 返回活动,name:返回的活动名称,…:返回的参数

9、onCreateOptionsMenu(menu)
function onCreateOptionsMenu(menu)
menu.add(“菜单”)
end

menu:选项菜单。

10、onOptionsItemSelected(item)
function onOptionsItemSelected(item)
print(item.Title)
end
item:选中的菜单项

11、
onConfigurationChanged(config)
function onConfigurationChanged(config)
print(“屏幕方向关闭”)
end

config:配置信息

12、按键事件
function onKeyDown(keycode,event)
print(“按键按下”,keycode)
end

function onKeyUp(keycode,event)
print(“按键抬起”,keycode)
end

function onKeyLongPress(keycode,event)
print(“按键长按”,keycode)
end

function onTouchEvent(event)
print(“触摸事件”,event)
end

keycode:键值
event:事件

AndroLua学习(2)——导入

1、导入模块
a.全局导入
在使用java脚本文件的开头,应该写上
require “import”
采用全局导入的方式导入 import,目前内置的有bson,canvas,cjson,crypt,ftp,gl,http,import,md5,smtp,socket,sensor,xml,zip,zlib等模块。
导入import后再导入其他模块,可以采用
import “http”
b.局部导入
local http = require “http”
local http = import “http”
这样导入的是局部变量。

2、导入包
可以使用 包名.* 的形式导入包
import “android.widget.*”
完整类名形式导入类
import “android.widget.Button”
导入内部类
import “android.view.View_onClickListener”
导入后直接使用内部类View.onClickListener
包名和类名必须用引号包围。导入类为全局变量。
可以这样导入局部变量:
local Button = import “android.widget.Button”

AndroLua学习(1)——开始

1、初始化

require "import"  
import "android.view.*"  
import "android.widget.*"  

第一句是导入我编写的import模块,该模块可以实现高度模拟Java的编程风格,使Java程序员无压力使用Lua脚本,后边两句对于Java程序员应该比较熟悉,导入两个安卓包,和Java不同的是包名需要加引号。
2、添加一个编辑框和一个按钮

layout={  
  LinearLayout;  
  orientation="vertical";  
  {  
    EditText;  
    id="edit";  
    layout_width="fill";  
  };  
  {  
    Button;  
    layout_width="fill";  
    text="按钮";  
    id="btn";  
  };  
};  

载入界面

activity.setContentView(loadlayout(layout))  

layout={}这个是一个Lua表,loadlayout函数可以把表解析为安卓视图,activity是当前活动的context对象。布局表的结构和安卓工程的XML大体相当,都是用嵌套关系表示视图的嵌套。

3、点击按钮没有反应,我们来添加按钮的onClick回调方法

btn.onClick=function(v)  
 Toast.makeText(activity,edit.Text, Toast.LENGTH_SHORT ).show()  
end

4、为什么使用表而不是xml布局。
因为表是Lua原生支持的数据结构,具有结构灵活,解析快的优点,以后讲动态布局时会详细说明。

5、为什么有些Java方法使用和Java不同。
Java的罗嗦是有目共睹的,所以在AndroLua对部分Java方法调用实现了简化,具体包括,
无参数getxxx方法可以简写为o.xxx,
单参数setxxx方法可以简写为o.xxx=x,
list与map对象可以使用下标(仅限字符串与数字)访问数据,a=map[“x”]相当于a=map.get(“x”)也可以进一步简化为a=map.x,
setxxxListener可以简化为o.xxx=function()end。
刚开始你可能不习惯,用多了你就发现这样很酷很方便。

酷派大神F1联通版救砖

1、安装MTK手机刷机驱动(包含64位)
64位驱动要选:DPInst64.exe
2、打开SP_Flash_Tools中的
flash_tool.exe
3、
在flash_tool中选择:下载
a.download-agent在SP_Flash_Tools目录下
b.载入scatter loading file,文件在救砖包里面

关键环节来了:
拔出电池,盖上后盖,按住音量上,不放手,插上数据线,不要放手,等到刷机工具出现黄色进度条了,放手开始刷机

修改SSH端口

1、编辑
vi /etc/ssh/sshd_config
找到#Port 22一段,这里是标识默认使用22端口,修改为如下:
Port 22
Port 50000
这样SSH端口将同时工作与22和50000上
然后保存退出

2、重启
执行/etc/init.d/sshd restart

3、注意事项
如果设置了iptables,请在iptables中修改打开相应端口

20160118-20160119

0118
1、集合竞价砸盘,但是开盘后5分钟没有看到恐慌反而修复形态
2、缩量,基本不打算交出廉价筹码
3、不能纯看量,因为这个时候场外资金是一点一点进程的。

0119
一致的喊空说明大家都在等一个多空转换开关,要是真的看空,会很沉默。
(这句话的情景应该是在下跌很多以后)

jQuery 1.9以上 on 无效的解决办法

jquery 1.9以上无法使用live,所有live功能合并到on中

$(selector).on(event,childSelector,data,function,map)

今天写代码的时候遇到一个奇怪的问题,append新元素到对象以后,新元素无法注册事件。

<ul>
<li><a class="btn btn-default"><i class="icon icon-add"></i> 复制</a></li>
</ul>
<script>
$(document).ready(function(){
$('.btn').on('click',function(){
ul= $(this).parents('ul');
ahref = $(this).parents('li').clone();
ul.append(ahref);
});
});
</script>

原因就在于是复制后的btn动态加载的元素,而使用上面的方法不能绑定动态加载元素的事件。修改后可以使用:

<script>
$(document).ready(function(){
$(document).on('click','.btn',function(){
ul= $(this).parents('ul');
ahref = $(this).parents('li').clone();
ul.append(ahref);
});
});
</script>

keydown、keypress、keyup的区别

用户在使用键盘时会触发键盘事件。目前,对键盘事件的支持主要遵循的是DOM0级。

在英文输入法下,所有浏览器都遵循以下三个事件:

keydown: 当用户按下任意键时触发,而且按住不放的话,会重复触发此事件。
keypress: 当用户按下字符键时触发,而且按住不放的话,会重复触发此事件。按下Esc键也会触发这个事件,Safari3.1之前的版本按下非字符键时也触发。
keyup: 当用户释放键时触发。
在中文输入法下,浏览器之间则表现得不一致,主要情况如下:

IE,Chrome,Safari:触发keydown和keyup, 不触发keypress。
Firefox:首次按下按键时触发keydown,不触发keypress。在停止输入法并改变文本框内容(如按下回车或者空格键)后会触发keyup。
Opera:keydown, keypress和keyup都不触发。
PS : 只有在触发keyup事件才能获得修改后的文本值。
所有元素都支持以上三个事件,一般情况下只有在文本框时才经常用到。

键盘事件的触发过程具体是这样的: 在用户按下键盘上的一个字符键时,首先会触发keydown事件,然后是keypress事件,最后是keyup事件。其中,keydown和keypress事件是在文本框发生变化之前被触发;而keyup在文本框发生变化之后被触发。如果用户按下一个键不放,就会重复触发keydown和keypress事件。在用户按下一个非字符键时,首先触发keydown事件,然后就是keyup事件。如果用户按下一个键不放,就会重复触发keydown。

当我们监听这三个事件时,最想得到的数据信息就是键码(keyCode)和字符编码(charCode)了。

键码(keyCode)

在发生keydown和keyup事件时,event对象的keyCode属性会包含一个代码,keyCode属性的值就是小写字母或数字对应的ASCII码(点击这里查看ASCII码表),在程序中可通过如下代码来获得keyCode值:

//EventUtil是一个封装的对象,用来处理跨浏览器事件
var textbox = document.getElementById('myText');
EventUtil.addHandler(textbox,'keydown',function(event){
event = event || window.event;
alert(event.keyCode);
});

以下是keydown和keypress事件存在的一些特殊情况:

在FF和Opera中,按分号键时keyCode值为59,但IE,Chrome和Safari则返回186
在Safari3之前的版本中,上、下、左、右箭头和上翻(PageUp)、下翻(PageDown)键返回大于63000的值。
字符编码(charCode)

在发生keypress事件时,FF、Chrome和Safari的event对象都支持一个charCode属性,charCode属性的值就是按下的字符键对应的ASCII编码,这个属性在按下非字符键或发生keydown和keyup事件时值为0;IE和Opera则是在keyCode中保存字符键的ASCII编码。所以,要想跨浏览器获得字符编码,代码如下:

//获取字符编码
var getCharCode = function(event){
var charcode = event.charCode;
if(typeof charcode == "number" &amp;&amp; charcode != 0){
return charcode;
}else{
//在中文输入法下 keyCode == 229 || keyCode == 197(Opera)
return event.keyCode;
}
};

这个方法首先检查charCode属性是否包含数值(在不支持这个属性的浏览器中,值为undefined),在判断是否等于0(兼容keydown和keyup事件),如果条件成立,则返回改值,否则返回keyCode的值。之前的例子获取字符编码如下:

var textbox = document.getElementById('myText');
EventUtil.addHandler(textbox,'keydown',function(event){
event = event || window.event;
alert(getCharCode(event));
});

在得到了字符编码后,可以使用String.fromCharCode()将其转换为实际的字符。

键盘事件的应用

1、 过滤输入——屏蔽某些字符的输入

达到的效果:只能输入数字,输入其他字符没有反应。不屏蔽辅助输入的按键,如退格键,方向键,复制,粘贴等。

原理很简单:在文本框修改前,获取字符编码,判断合理性,不成立则阻止键盘的默认事件。看起来很简单,但由于浏览器的兼容问题,实现起来还是有点难度。代码如下:

var handler= function(e){
e = e || window.event;
var charcode = typeof e.charCode == 'number' ? e.charCode : e.keyCode;
var re = /\d/;
//FF和safari3.1以前版本会对方向键、退格键、删除键触发keypress事件 charcode &gt; 9 可修复此Bug
//!e.ctrlKey 不屏蔽Ctrl+C,Ctrl+V
if(!re.test(String.fromCharCode(charcode)) &amp;&amp; charcode &gt; 9 &amp;&amp; !e.ctrlKey){
//阻止默认事件
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue = false;
}
}
};
EventUtil.addHandler(textbox,'keypress',handler);
//监听粘贴事件
EventUtil.addHandler(textbox,'paste',function(e){
e = e || window.event;
var clipboardData = e.clipboardData || window.clipboardData;
if(!/^\d*$/.test(clipboardData.getData('text'))){
//阻止默认事件
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue = false;
}
}
});

在这个例子的基础上加以修改和调整,就可以应用于放过或屏蔽任何输入文本框的字符。

很遗憾,还有一个bug未能解决,就是在中文输入法时keypress事件失效问题。

针对中文输入法的Bug,目前找到的解决办法是:在文本框加入属性style=”ime-mode:disabled” IE和FF下可禁用输入法;在Chrome,Safar下可为文本框添加keydown事件,判断event.keyCode是否等于299,是的话就阻止keydown默认事件,这种方法对IE也有效。而对于Opera则没有找到解决办法。