Android 个人总结

 

第一章、环境搭建

1、项目下的目录:

lib:存放源代码编译出来的文件。

res:资源文件夹:文件下的资源是会被编译的,并且在gen目录下的R.java中生成ID

assers:文件下的资源是不会被编译的。

project.properties:代表编译的版本。对应android.jar包的版本。

gen:自动生成的目录文件。

AndroidManifest.xml:清单文件,程序的配置信息,有启动的图标、应用程序名称、包名、版本号、在桌面上创建快捷方式。

2、环境变量配置:

E:\Android\adt-bundle-windows-x86-20130729\sdk\platform-tools下的adb.exe

方法一:在用户变量Path中直接输入路径。

方法二:在系统变量中新建Android-HOME,值为sdk路径(E:\Android\adt-bundle-windows-x86-20130729),然后在用户变量Path中添加%Android-HOME%\platform-tools

方法三:在系统变量Path中直接输入路径。

3、名词含义:

1avdAndroid virtual devices     Android虚拟设备

2adtAndroid develop tools      Android开发工具(eclipse的插件)

3sdkstandard develop kits       标准开发工具集

4adb.exeandroid debug bridge   Android调试桥   每个模拟器可看作一个独立的Linux系统,要与Windows系统联系起来就要用到android调试桥。

4、常见的命令操作: 

adb devices :列出所有连接的模拟器设备。

reset adb :重启adb的调试桥(相当于执行了以下两个指令)

adb kill-server :杀死adb调试桥。

adb start-server :启动adb调试桥。

netstat -ano :查询当前端口占用情况。

adb install HelloWorld.apk :为虚拟机安装apk程序。

adb uninstall HelloWorld :卸载程序。

adb -s emulater-5554 install HelloWorld.apk:若有多个机子,为指定机子安装程序。

adb pull 设备中文件 此文件命名 :将设备中的文件导出来。

adb push 文件 导入手机后的名称 /位置 :将文件导入手机。

adb -v :查看adb版本。

adb shell :远程连接到模拟器Linux终端。可以对模拟器文件进行操作。ls:显示目录结构。ps :列出正在进行的进程。ping :查看手机网络连通性。

adb logcat :查看日志文件

Ctrl+F11 :横竖屏切换。

 

5apk安装的过程:

①利用javac.java文件编译成.class文件

②用dx.bat.class文件编译成.dex文件

resources.arsc :应用程序所有的资源放到此文件中

 

 

6、eclipse的操作:

(1)将部分代码抽取出来放在一个方法里面:选中要抽取的代码,右键Refactor-----Extract method...

(2)捕获异常:选中代码,右键Surround With-------Try/catch Block...

(3)

 

 

 

 

 

 

第二章Android基本知识

1、布局:

1)霓虹灯效果:FrameLayout层叠嵌套(见例FrameLayout下的NeonLight)。

A.用进程的概念:先new Handler对象handler,调用handler.postDelayed(this,300)方法,实现Runnable接口中的void run(),每300秒执行run()方法。

B.用数组实现TextView的颜色循环变化。

(2)按钮分而治之:线性布局linearlayout(见例FrameLyout下的MainActivity)。

A.线性布局LinearLayout里面的属性:android:layout_weight=1;代表同一层次的布局将页面水平(horizontal)或垂直(vertical)按比例分割。

B.组件里面的位置属性是android:layout_gravity=center;布局里面的位置属性是android:gravity=center

 

 

2、相对布局RelativeLayout:注重控件之间的位置关系。

1)相对与控件的一些属性:

android:layout_below=控件ID       :某控件的下方。

android:layout_toLeftOf=控件ID     :某控件的左边。

android:layout_toRightOf=控件ID    :某控件的右边。

android:layout_above=控件ID   :某控件的上边。

android:layout_alignLeft=控件ID     :与某控件左边对其。

(2)相对于父窗口的属性:

android:layout_centerInParent=true    :在父窗体居中。

android:layout_centerHorizontal=true   :在父窗体水平居中。

android:layout_centerVertical=true     :在父窗体垂直居中。

android:layout_alignParentButton=true  :与父窗体底部对齐。

 

 

3android中的基本单位:

dp == dip    单位像素密度。在不同大小的屏幕分配的像素不同,按比例分配。Android中控件的位置单位一般用dp

px :   固定像素。不论屏幕有多大,距离都是固定的像素,所以不同屏幕中控件可能会乱,所以不建议使用。

sp :   和dp差不多,专门为文字大小创建的单位,。使得文字在缩放的时候不会产生锯齿。

 

 

4、线性布局LinearLayout:注重控件在水平或垂直的排列。

(1)LinearLayout中的属性:

android:orientation=vertical (horizontal)  :布局里面控件垂直(水平)排列。

(2)控件中的属性:

android:layout_weight = 1   :权重,将控件按比例分配空间。

android:gravity=center      :控件中的内容居中显示,默认是left

 

 

5、表格布局TableLayout

(1)<TableRow>

放入控件,按表格显示。

</TableRow>

 

 

6、绝对布局Absolutely

(1)控件位置属性:

android:layout_x=100dp   :控件与父窗体左边界的距离。

android:layout_y=100dp   :控件距父窗体上边界的距离。

 

7、帧布局FrameLayout:各控件层层覆盖。

(1)控件中的属性:

android:visibility=visible    :设置此控件可见。

android:visibility=invisible   :设置此控件不可见。

例子:帧布局。实现某一控件的隐藏,如视频播放器暂停时会出现暂停图标。

 

 

8fragment

(1)概念:帧 片段 轻量级的activity。封装布局(封装UI的机制)和代码的组件,可看作一个panel容器。不需要在清单文件中配置。平板的用处比较大。

注:sdk的版本11后才有。

2创建Fragment的两种方法

A、在xmlfragment里面属性class,指定此片段中内容的类位置。(见例FirstFragment)。

继承Fragment的类要实现onCreateView()方法,进行创建,返回View

B、在主Activity的类中直接调用Fragment类创建对象,用fragment管理器替换当前片段。(见例Fragment页面切换)。

获得fragment的管理器:FragmentManager fm = getFragmentManager();

开启此管理器的事务:FragmentTransaction ft = fm.beiginTransaction();

注:既然是事务(操作同时成功,或操作失败),在最后就得关闭事务:ft.commit();

Fragment的添加:ft.add();  移除:ft.remove();   

替换(第一个参数:当前Activity的界面):ft.replace(android.R.id.contentfragment1);

(3)Fragment之间的传值:

Android中传递数据一般用bundle

MyFragment fragment = new MyFragment();

Bundle bundle = new Bundle();

bundle.putString("name""Hello Fragment1");

fragment.setArguments(bundle);

接收传来的值getArguments()

String name = getFragmentManager().findFragmentByTag("fragment")

.getArguments().getString("name");

4Fragment的向下兼容(在低版本的手机上也可以用fragment):

创建的每个项目都会在libs的文件夹下有一个android-support-v4.jar包,Fragment导包import android.support.v4.app.Fragment; 获得管理器时FragmentManager fm = getSupportFragmentManager();   Activity继承的是FragmentActivity

 

 

9、实现点击事件的四中方法:

(1)创建一个内部类定义点击事件。

button.setOnClickListener(new MyListener);

private class MyListener implements OnClickListener{

public void onClick(View view){

//点击事件的具体操作

}

}

(2)采用匿名内部类创建点击事件。

button.setOnClickListener(new OnClickListener(){

public void onClick(View view){

//点击事件的具体操作

}

});

(3)Activity实现点击事件接口里面的点击方法。

button.setOnClickListener(this);

好处:此页面中可能有很多点击事件,避免用内部类,减少代码。

(4)在要点击的view对象里面添加点击属性。

android:onClick=onclick_button

 

 

10、电话拨号器:

Intent intent = new Intent();

intent.setAction(Intent.ACTION_CALL);

intent.setData(Uri.parse(tel+number));

startActivity(intent);

 

11、短信发送器:

(1)设置EditText的行数:

android:lines=5   行数为5的文本编辑框。

android:singleline=true   单行文本编辑框。

2)主要代码:

String number = et_number.getText().toString().trim();

String content = et_content.getText().toString().trim();

//判断号码与内容是否为空

if(TextUtils.isEmpty(number)||TextUtils.isEmpty(content)){

Toast.makeText(MainActivity.this"号码或发送内容不能为空", Toast.LENGTH_SHORT).show();

return;

}

//创建短信管理实例

SmsManager sm = SmsManager.getDefault();

//短信内容过大时,将内容分割,分批发送

ArrayList<String> contents = sm.divideMessage(content);

for(String str:contents){

 //第一个参数:要发送的地址第二个参数:发送方的地址第三个参数:发送内容 第四个参数:是否发送失败第五个参数:送达报告

sm.sendTextmessage(number,110,str,null,null);

}

 

 

12、测试

(1)根据测试是否知道源代码:

黑盒测试:只关心程序执行的过程和结果。

白盒测试:根据源代码写测试方法和测试用例。

(2)根据测试的粒度:

方法测试:function test

单元测试:unit test

集成测试:intergration

3)根据测试的次数:

冒烟测试:smoke test   android 猴子)

cmd中进入手机终端adb shell---------monkey--------monkey 5000

此命令在手机上胡乱随机点击5000次。

压力测试:pressure test

 

 

13、保存文件到手机内存(见例:登陆界面保存密码)

(1)保存文件:

try {

// File file = new File("/data/data/com.itheima.login/info.txt");

/*

 *为了避免包名的修改等操作,会对文件路径有影响,不必在代码中改动,

 *谷歌工程师暴露出一个context的方法

 *context.getFilesDir()

 *帮助返回一个目录/data/data/com.itheima.login/files/

 * 注:在包名根目录下创建了files的文件夹

 */

String path = context.getFilesDir().toString();

File file = new File(path,"info.txt");

FileOutputStream fos = new FileOutputStream(file);

//将用户名和密码保存为zhangsan##123格式

fos.write((userName+"##"+password).getBytes());

//关闭流

fos.close();

return true;

catch (Exception e) {

e.printStackTrace();

//打印日志

Log.i(tag, userName);

Log.d(tag, password);

Toast.makeText(context, "用户信息存储失败!", 0).show();

return false;

}

(2)回显:

try {

String path = context.getFilesDir().toString();

File file = new File(path,"info.txt");

FileInputStream fis = new FileInputStream(file);

BufferedReader bf = new BufferedReader(new InputStreamReader(fis));

String str = bf.readLine();

//zhangsan##123   将此文本分隔出来

String[] s = str.split("##");

Map<String, String> map = new HashMap<String, String>();

map.put("userName", s[0]);

map.put("password", s[1]);

return map;

catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

return null;

}

3catch :缓存文件夹。

 

14、内存中文件访问权限(见例:文件访问权限):

Linux系统下的文件访问权限,用权限permissions下的十个字符来标识。见下图。

Android 个人总结_第1张图片 

十个字符:位置0代表文件(在内存中定义为0),d代表目录(内存中定义为1)。

  位置1~3:代表当前用户(此程序),r可读,w可写,x可执行,无论何种模式对当前用户可读可写。

  位置4~6:代表当前用户所在的组。(组:一般情况下每个用户是一个组,系统中有些应用程序是一个组。 查看终端组:在cmd下进入终端adb shell~~~~cd data/data/~~~ls -l 可以看到第一列为权限,第二列为用户ID,第三列为用户所在的组,第四列是包名)。

  位置7~9:代表其他用户的权限。

  在内存中:用二进制表示。- --- --- ---  四个十进制表示0 0 0 0,如下:

Android 个人总结_第2张图片 

  这些访问权限值在终端是可以修改的,首先找到该文件:adb shell~~~cd data/data/~~~cd com.itheima.login~~~cd files~~~ls -l 得到files目录的文件,改变文件权限:chmod 666 private.txt

 

(1)私有文件:

FileOutputStream fos = context.openFileOutput(private.txt,Context.MODE_PRIVATE);

(2)可读的文件:

FileOutputStream fos = context.openFileOutput(read.txt,Context.MODE_WORLD_READABLE);

(3)可写的文件:

FileOutputStream fos = context.openFileOutput(write.txt,Context.MODE_WORLD_WRITEABLE);

(4)可读可写的文件:

FileOutputStream fos = context.openFileOutput(public.txt,Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);

 

(5)默认文件权限类型:

File file = new File(context.getFilesDir().toString(),info.txt);

FileOutputStream fos = new FileOutputStream(file);

 

 

 

第三章、知识点总结

1、从assets中获得某文件的内容:

InputStream in = getActivity().getResources().getAssets().open(文件名);

2、判断屏幕朝向(横或竖):

int width = getWindowManager().getDefaultDisplay().getWidth();

int Height = getWindowManager().getDefaultDisplay().getHeight();

水平方向:width>height;     反之是垂直方向。

3、Ctrl+1xml文件中android:text=国际化,里面的内容可以用此快捷键设置将其替换到string.xml中。

Ctrl+F:修改选中内容,将此页面中同名的都改掉。

4、Url:统一资源定位符。Uri:统一资源标识符。Uri的范围大于Url

5、trim():将字符串中的空格和回车去掉。

String number = editText.getText().toString().trim();

6、android中判断文本是否为空:

文本工具类TextUtilsisEmpty()方法,返回boolean类型。

例:if(TextUtils.isEmpty(number)){}

7、日志信息LogCat

分等级:verbose  提醒  黑色

Debug   调试  蓝色

Info     信息  绿色

Ware    警告  橙色

Error    错误  红色

Log.v(tag,输出内容)   tag为找到此日志的标识。同理还有diwe

8、context上下文:

就是一个系统类,提供一些方便的api,里面的方法可以得到应用程序的环境(包名,安装路径,文件路径,资源路径,资产路径)。

context.getFilesDir() :得到应用程序的包名下的files文件夹。

context.getCatchDir():得到缓存目录(包名下的catch文件夹)。

context.openFileOutput(name,mode):在包名下创建文件。

 

你可能感兴趣的:(Android 个人总结)