Jiliuke

激流客

1. getApplicationContext():生命周期是整个应用,应用摧毁,它才摧毁。 2. this:代表当前,在Activity当中就是代表当前的Activity,换句话说就是Activity.this在Activity当中可以缩写为this. 3. getApplication():andorid 开发中共享全局数据; 我们在平时的开发中,有时候可能会需要一些全局数据,来让应用中得所有Activity和View都能访问到,大家在遇到这种情况时,可能首先会想到自己定义一个类,然后创建很多静态成员,不过andorid已经为我们提供了这种情况的解决方案:在Android中,有一个名为Application的类,我们可以在Activity中使用getApplication(),方法来获得,它是代表我们的应用程序的类,使用它可以获得当前应用的主题,资源文件中的内容等,这个类更灵活的一个特性就是可以被我们继承,来添加我们自己的全局属性。

1.概念 盛放Tab的容器就是TabHost。TabHost的实现有两种方式: 第一种继承TabActivity,从TabActivity中用getTabHost()方法获取TabHost。各个Tab中的内容在布局文件中定义就行了。 第二种方式,不继承TabActivity,在布局文件中定义TabHost即可,但是TabWidget的id必须是@android:id/tabs,FrameLayout的id必须是@android:id/tabcontent。 2.案例 1)继承TabActivity res/layout/main.xml <TabHost xmlns:android=”http://schemas.android.com/apk/res/android" android:layout_width=”fill_parent” android:layout_height=”fill_parent”> <LinearLayout android:id=”@+id/tab01” android:orientation=”vertical” android:layout_width=”fill_parent” android:layout_height=”fill_parent”> <TextView android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:text=”孙悟空-2011/07/12”/> <TextView android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:text=”猪八戒-2011/07/10”/> <LinearLayout android:id=”@+id/tab02” android:orientation=”vertical” android:layout_width=”fill_parent” android:layout_height=”fill_parent”> <TextView android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:text=”萨僧-2011/07/11”/> <TextView android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:text=”唐僧-2011/07/10”/> <LinearLayout android:id=”@+id/tab03” android:orientation=”vertical” android:layout_width=”fill_parent” android:layout_height=”fill_parent”> <TextView android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:text=”孙悟空-2011/07/12”/> <TextView android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:text=”萨僧-2011/07/08”/> HelloTabHost.java public class HelloTabHost extends TabActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //调用TabActivity的getTabHost()方法获取TabHost对象 TabHost tabHost = getTabHost(); //设置使用TabHost布局 LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(),true); //添加第一个标签页 tabHost.addTab(tabHost.newTabSpec(“tab01”).setIndicator(“已接电话”).setContent(R.id.tab01)); //添加第二个标签页,并在其标签上添加一个图片 tabHost.addTab(tabHost.newTabSpec(“tab02”).setIndicator(“未接电话”,getResources().getDrawable(R.drawable.icon)).setContent(R.id.tab02)); //添加第三个标签页 tabHost.addTab(tabHost.newTabSpec(“tab03”).setIndicator(“已拨电话”).setContent(R.id.tab03)); } }   2)不继承TabActivity 继承普通Activity,标签id必须为tabs、标签id必须为tabcontent.这个方式在通过findViewById获得TabHost之后,必须要调用setup方法。 main.xml代码 <TabHost android:id=”@+id/tabhost” android:layout_width=”fill_parent” android:layout_height=”wrap_content”> <LinearLayout android:orientation=”vertical” android:layout_width=”fill_parent” android:layout_height=”fill_parent”> <TabWidget android:id=”@android:id/tabs” android:orientation=”horizontal” android:layout_width=”fill_parent” android:layout_height=”wrap_content” /> <FrameLayout android:id=”@android:id/tabcontent” android:layout_width=”fill_parent” android:layout_height=”fill_parent”> <TextView android:id=”@+id/view1” android:layout_width=”fill_parent” android:layout_height=”fill_parent”/> <TextView android:id=”@+id/view2” android:layout_width=”fill_parent” android:layout_height=”fill_parent”/> <TextView android:id=”@+id/view3” android:layout_width=”fill_parent” android:layout_height=”fill_parent”/> Java代码 public class TabHostTest extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获取TabHost对象 TabHost tabHost = (TabHost) findViewById(R.id.tabhost); // 如果没有继承TabActivity时,通过该种方法加载启动tabHost tabHost.setup(); tabHost.addTab(tabHost.newTabSpec(“tab1”).setIndicator(“第一个标签”, getResources().getDrawable(R.drawable.icon)).setContent( R.id.view1)); tabHost.addTab(tabHost.newTabSpec(“tab3”).setIndicator(“第三个标签”) .setContent(R.id.view3)); tabHost.addTab(tabHost.newTabSpec(“tab2”).setIndicator(“第二个标签”) .setContent(R.id.view2)); } }

问题出在你的xml布局定义中的这一行: android:id=”@android:id/tabhost” 如果是想不用android的tabhost的id,那么这行应该改为: android:id=”@+id/tabhost” 如果确实要用android的定义,又要找到这个窗口,那么应该改代码中的这行: TabHost mTabHost = (TabHost)findViewById(R.id.tabhost); 应该改成 TabHost mTabHost = (TabHost)findViewById(android.R.id.tabhost);

整的错误提示信息为:No orientation specified, and the default is horizontal. This is a common source of bugs when children are added dynamically. 通常发生这个错误提示的原因是我们直接在原有的页面上把别的布局标签改成,但是使用标签要指明方向,水平方向还是垂直方向 horizontal or vertical 所以直接修改,会导致没有指名线性布局的方向,只要添加上 android:orientation = “vertical” 或 android:orientation = “horizontal” 即可解决

在andriod项目中引用另一个library project时,报

The container ‘Android Dependencies’ references non existing library ‘xxxxxxx’ 错误,解决办法是右击library project,选择Build Path->Configure Build Path->Order and Export->Select All将所有包都选上

从jQuery 1.6开始,新加入了一个prop方法。这个方法和attr方法功能非常的相近。

以下是官网建议的使用情况:

Attribute/Property

.attr()

.prop()

accesskey

align

async

autofocus

checked

class

contenteditable

draggable

href

id

label

location ( i.e. window.location )

multiple

readOnly

rel

selected

src

tabindex

title

type

width ( if needed over .width() )

个人简要总结了一下:

1、赋值时候,如果是这样的只有属性名就能生效的属性

推荐prop,即:$(‘input’).prop(‘checked’,true);

同时,false表示取消,即:$(‘input’).prop(‘checked’,false);

当然attr也行的:$(‘input’).attr(‘checked’,’这里写什么都行的’);

取消属性就是移除:$(‘input’).removeAttr(‘checked’);

2、取值的时候,如果是

推荐使用prop,即:

$(‘#input1’).prop(‘checked’); //返回true

$(‘#input2’).prop(‘checked’); //返回false

而使用attr,则:

$(‘#input1’).attr(‘checked’); //返回checked

$(‘#input2’).attr(‘checked’); //返回undefined

3、特殊属性赋值取值

这个特殊说明下,获取很多人都用不到呢。

比如需要在input中追加一个data-tips属性。变成这样子

这时候只能写:$(‘input’).attr(‘data-tips’,’aa’);

使用prop是不管用的。

但是读值时候,两个都可以的:

$(‘input’).attr(‘data-tips’);//返回aa

$(‘input’).prop(‘data-tips’);//返回aa

1.去其官方网站http://www.sublimetext.com/ 把linux版下载下来,解开压缩包,放在你希望的路径下。 2.用vim将其打开 。 vim sublime_text 3.将文件转成十六进制形式。vim中输入 :%!xxd 3.在vim中定位至“Thanks”文字附近。 /Thanks 4.接着查找数字串“3342”。 /3342 找到一处3342的地方大致是这个样子 ……4333 3342 3032……. 将这里的3342 改为3242。 5.将文件转换回去。 :%!xxd -r 6.保存文件、退出。 :wq 7.打开程序,去help-enter licence 里贴进去通过程序算出来的Licence,OK 成功了。 这里贴出来几个算好的供使用。 —–BEGIN LICENSE—– China Unlimited User License EA7E-2861 BE67D2175D3569FDAB9EB5340FAD2822 E7B56B3397A76AA9FBE8AC3D3C65918B DFC28F2EA158140D9E07853D594818EB 3A237B2E8E98ED257C269548F50EDA34 EF0C7F72D8917DB538A0245E46BFD6B1 85F4EDE331F253530ED67A5C19E92399 04C5F4A1AF4AF3DB5EC49C1FEE17CA76 7E369F8AAE4AC6C6E756B5882E1608B9 —–END LICENSE—– —–BEGIN LICENSE—– USA Unlimited User License EA7E-1640 763D05839CA08BDA7B0103B5BABF0150 195EE53CC33B569858AFD553F080A9BC 1F678C88A1342AC92CA596FE775E7014 5A0EE55DC2F8DE3C4ED6B5B02FD4DB3C 493FCE3EE61FC0588CDAFAAD731BB47F FD047777D02A5BE92202B3D3EB59A696 A69DFEF6687D16FCD4443556912A1F62 82DA125263C5BC270CEE7664B5D0CEB9 —–END LICENSE—– —–BEGIN LICENSE—– A Unlimited User License EA7E-20708 A7281D6781626F2A37D6355121079ACA DF60119B9D27D4CBDA75FA63D633A671 9521D96D375D8DD95DF3F89231E38F8D 459374CC62D1C1B410C0BDFD2503670E 603BB1DCA7D20E85B0AF19BAE0A59822 F7B1F83659D4D7787C4F040FE9402FCD B9608A9012BDA8B65524B4DEDE4C00D0 76461448E2AAEC027060C26B038D502B —–END LICENSE—– —–BEGIN LICENSE—– B Unlimited User License EA7E-13207 B5C54DD7413302E87A9ED4155E90D5E0 684F7A34714D278ABE2731F0270034E2 9722AEC71E04043C0E9D4496D1DA161B D76CE81501A247F3E03F57D6EC1E76AE 12BE9CD453D1E651AF4BD187CC10FEB0 EB24FBAB7511F2F37E5F745D13D0641F 7D1BEEE98A9646A02B616BF98EB43F84 B04029D72C610086A666DB318A526A2F —–END LICENSE—– —–BEGIN LICENSE—– Love Unlimited User License EA7E-8441 918381ACA844A0379CCAC729059720A4 BC9D409098618744BB45FF23E67568DB 82B926D92157127DB3B4054834D0477F DD9C2B251A57F2E3259E04AD9B7DB8B8 1778C37C1D3B494671C5F4ECFBD2B519 361CD9624A56C21F54F8DD51F5BDF799 68F9537ED74680494853423904F032BA 3E896607B4D398E8C897A4DD1A8CB449 —–END LICENSE—– —–BEGIN LICENSE—– NightM Unlimited User License EA7E-5177 8125006DCD9E513CD4F1C217CAD3801D E72D3130CA1F04CFEDF3696C0F68553D DC42B172E38962890A87035FCE26049F 15EFA09D4BCC811617915165959A499F 402866AFC08E72615336D863968B60FB C9167F72F4B25ED5E8E593D2E19F43E7 C7EC9F459EA62F1DD1757DC9967C4801 8E48683A4F0F9CAC3CC0621F2D48292F —–END LICENSE—– 使用terminal安装的,安装目录在/usr/lib/sublime-text-2/sublime_text 下, 拷贝出来,修改,在sudo cp -f 回去即可继续后续步骤。

在这个例子,所有请求都将拒绝

2.2 configuration:

Order deny,allow
Deny from all

2.4 configuration:

Require all denied

在这个例子,所有请求都将允许

2.2 configuration:

Order allow,deny
Allow from all

2.4 configuration:

Require all granted

在这个例子,所有在 example.org域名的主机都将被允许访问;其他的都将拒绝。

2.2 configuration:

Order Deny,Allow
Deny from all
Allow from example.org

2.4 configuration:

Require host example.org

在javascript中,当你使用小数进行加减乘除运算时,你会发现,所得到的结果有时后面带有长长的一段小数,使运算变得复杂,并且影响计算结果。上网查询了一下原因,大致如下:在javascript中,带小数的数据运算时总会出现好多位小数.这是因为在javascript中浮点数的计算是以2进制计算的。

解决办法:

/**

* 加法运算,避免数据相加小数点后产生多位数和计算精度损失。

*

* @param num1加数1 | num2加数2

*/

function numAdd(num1, num2) {

var baseNum, baseNum1, baseNum2;

try {

baseNum1 = num1.toString().split(“.”)[1].length;

} catch (e) {

baseNum1 = 0;

}

try {

baseNum2 = num2.toString().split(“.”)[1].length;

} catch (e) {

baseNum2 = 0;

}

baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));

return (num1 * baseNum + num2 * baseNum) / baseNum;

};

/**

* 加法运算,避免数据相减小数点后产生多位数和计算精度损失。

*

* @param num1被减数 | num2减数

*/

function numSub(num1, num2) {

var baseNum, baseNum1, baseNum2;

var precision;// 精度

try {

baseNum1 = num1.toString().split(“.”)[1].length;

} catch (e) {

baseNum1 = 0;

}

try {

baseNum2 = num2.toString().split(“.”)[1].length;

} catch (e) {

baseNum2 = 0;

}

baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));

precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;

return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);

};

/**

* 乘法运算,避免数据相乘小数点后产生多位数和计算精度损失。

*

* @param num1被乘数 | num2乘数

*/

function numMulti(num1, num2) {

var baseNum = 0;

try {

baseNum += num1.toString().split(“.”)[1].length;

} catch (e) {

}

try {

baseNum += num2.toString().split(“.”)[1].length;

} catch (e) {

}

return Number(num1.toString().replace(“.”, “”)) * Number(num2.toString().replace(“.”, “”)) / Math.pow(10, baseNum);

};

/**

* 除法运算,避免数据相除小数点后产生多位数和计算精度损失。

*

* @param num1被除数 | num2除数

*/

function numDiv(num1, num2) {

var baseNum1 = 0, baseNum2 = 0;

var baseNum3, baseNum4;

try {

baseNum1 = num1.toString().split(“.”)[1].length;

} catch (e) {

baseNum1 = 0;

}

try {

baseNum2 = num2.toString().split(“.”)[1].length;

} catch (e) {

baseNum2 = 0;

}

with (Math) {

baseNum3 = Number(num1.toString().replace(“.”, “”));

baseNum4 = Number(num2.toString().replace(“.”, “”));

return (baseNum3 / baseNum4) * pow(10, baseNum2 - baseNum1);

}

};

0%