Jiliuke

激流客

原创:

1.安装centos ,这里使用CentOS-6.5-x86_64-LiveDVD.iso

下载地址:http://mirrors.sohu.com/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-LiveDVD.iso

安装完毕后进入系统

2.关闭系统防火墙,selinux

打开终端,输入命令

#service iptables stop //关闭防火墙

#setenforce 0 //关闭selinux

3.下载apache源码,php源码,mysql源码

首先,在根目录(/)创建一个文件夹,命名source,创建一个文件夹,命名lamp,然后进入source目录,以下是命令方法

桌面右键,在终端中打开,然后输入命令

#cd /

#mkdir source

#mkdir lamp

#cd source

下载apache2.2.27

#wget http://mirrors.sohu.com/apache/httpd-2.2.27.tar.gz

下载mysql5.6.20

#wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.21.tar.gz

下载php5.4.27

#wget http://mirrors.sohu.com/php/php-5.4.27.tar.gz

3.1安装apache2.2.27

解压安装包httpd-2.2.27.tar.gz

#tar -xzf httpd-2.2.27.tar.gz

进入目录

#cd httpd-2.2.27

# ./configure –prefix=/lamp/apache

接下来会报错

需要安装gcc gcc++

#yum -y install gcc gcc-c++

再次编译,顺利安装

# ./configure –prefix=/lamp/apache

#make;make install

拷贝启动启动文件到/etc/init.d/

#cp /lamp/apache/bin/apachectl /etc/init.d/httpd

启动apache,输入物理地址,提示It works!以下界面则提交成功

#service httpd start

3.2 安装mysql5.6.20

安装mysql需要安装cmake,首先下载cmake,其次还要安装ncurses-devel

#cd /source

#wget http://www.cmake.org/files/v2.8/cmake-2.8.12.2.tar.gz

#tar -xzf cmake-2.8.12.2.tar.gz

#cd  cmake-2.8.12.2

#./configure

#gmake

#make;make install

#yum install ncurses-devel

安装mysql

#cd /source

#tar -xzf mysql-5.6.20.tar.gz

#cd  mysql-5.6.20

#cmake -DCMAKE_INSTALL_PREFIX=/lamp/mysql && make && make install

#cd /lamp/mysql

#scripts/mysql_install_db –basedir=/lamp/mysql –datadir=/lamp/mysql/data –user=mysql

#cp support-files/my-default.cnf /lamp/mysql/my.cnf

#cp support-files/mysql.server /etc/init.d/mysqld

增加环境变量

#vim /etc/profile

在文件末尾加入PATH=$PATH:/lamp/mysql/bin

#source /etc/profile

启动mysql

#service mysqld start

如果我无法启动,看看是否有mysqld进程没有关闭,全部kill -9   ,查看命令ps -ef|grep mysqld

3.3 安装php5.4.27

#cd /source

#tar -xzf php-5.4.27.tar.gz

# cd php-5.4.27

# ./configure –prefix=/lamp/php –with-mysql=/lamp/mysql –with-mysqli=/lamp/mysql/bin/mysql_config –with-apxs2=/lamp/apache/bin/apxs –enable-mbstring

#cp /source/ php-5.4.27/php.ini-development /lamp/php/lib/php.ini

设置默认时区

#vim /lamp/php/lib/php.ini

大概909行修改为date.timezone = PRC

可能会报错,这里是perl未安装

#yum -y install perl

可能会报错,这里是libxml2 libxml2-devel未安装

#yum -y install libxml2 libxml2-devel

增加环境变量

#vim /etc/profile

在文件末尾加入PATH=$PATH:/lamp/php/bin

#source /etc/profile

修改apache配置,让其支持php解析

#vim /lamp/apache/etc/httpd.conf

搜索AddType,大概310行

增加AddType application/x-httpd-php .php

搜索Directory,大概168行

修改为DirectoryIndex index.php index.html

重启apache

#service httpd restart

到此安装成功

在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。

具体作用:

1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;

2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。

LayoutInflater 是一个抽象类,在文档中如下声明:

public abstract class LayoutInflater extends Object

获得 LayoutInflater 实例的三种方式

1. LayoutInflater inflater = getLayoutInflater();//调用Activity的getLayoutInflater()

2. LayoutInflater inflater = LayoutInflater.from(context);

3. LayoutInflater inflater = (LayoutInflater)context.getSystemService

                              (Context.LAYOUT_INFLATER_SERVICE);

其实,这三种方式本质是相同的,从源码中可以看出:

getLayoutInflater():

Activity 的 getLayoutInflater() 方法是调用 PhoneWindow 的getLayoutInflater()方法,看一下该源代码:

public PhoneWindow(Context context)

{

 super(context);

    mLayoutInflater = LayoutInflater.from(context);

}

可以看出它其实是调用 LayoutInflater.from(context)。

LayoutInflater.from(context):

public static LayoutInflater from(Context context)

{

 LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService

         (Context.LAYOUT_INFLATER_SERVICE);

    if (LayoutInflater == null)

    {

     throw new AssertionError(“LayoutInflater not found.”);

    }

    return LayoutInflater;

}

可以看出它其实调用 context.getSystemService()。

结论:所以这三种方式最终本质是都是调用的Context.getSystemService()。

另外getSystemService()是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。

传入的Name 返回的对象 说明

WINDOW_SERVICE WindowManager 管理打开的窗口程序

LAYOUT_INFLATER_SERVICE LayoutInflater 取得xml里定义的view

ACTIVITY_SERVICE ActivityManager 管理应用程序的系统状态

POWER_SERVICE PowerManger 电源的服务

ALARM_SERVICE AlarmManager 闹钟的服务

NOTIFICATION_SERVICE NotificationManager 状态栏的服务

KEYGUARD_SERVICE KeyguardManager 键盘锁的服务

LOCATION_SERVICE LocationManager 位置的服务,如GPS

SEARCH_SERVICE SearchManager 搜索的服务

VEBRATOR_SERVICE Vebrator 手机震动的服务

CONNECTIVITY_SERVICE Connectivity 网络连接的服务

WIFI_SERVICE WifiManager Wi-Fi服务

TELEPHONY_SERVICE TeleponyManager 电话服务

inflate 方法

通过 sdk 的 api 文档,可以知道该方法有以下几种过载形式,返回值均是 View 对象,如下:

public View inflate (int resource, ViewGroup root)

public View inflate (XmlPullParser parser, ViewGroup root)

public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)

public View inflate (int resource, ViewGroup root, boolean attachToRoot)

示意代码:

LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);

View view = inflater.inflate(R.layout.custom, (ViewGroup)findViewById(R.id.test));

//EditText editText = (EditText)findViewById(R.id.content);// error

EditText editText = (EditText)view.findViewById(R.id.content);

对于上面代码,指定了第二个参数 ViewGroup root,当然你也可以设置为 null 值。

注意:

·inflate 方法与 findViewById 方法不同;

·inflater 是用来找 res/layout 下的 xml 布局文件,并且实例化;

·findViewById() 是找具体 xml 布局文件中的具体 widget 控件(如:Button、TextView 等)。

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 回去即可继续后续步骤。

0%