Android 我的总结

 

第一章、环境搭建前端

一、项目下的目录:java

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

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

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

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

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

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

二、环境变量配置:网络

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

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

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

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

三、名词含义:

(1)avd:Android virtual devices     Android虚拟设备

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

(3)sdk:standard develop kits       标准开发工具集

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

四、常见的命令操做: 

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 :横竖屏切换。

 

五、apk安装的过程:

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

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

③resources.arsc :应用程序全部的资源放到此文件中

 

 

六、eclipse的操做:

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

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

 

 

第二章、Android基本知识

一、布局:

(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”;

 

 

二、相对布局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”  :与父窗体底部对齐。

 

 

三、android中的基本单位:

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

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

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

 

 

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

(1)LinearLayout中的属性:

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

(2)控件中的属性:

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

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

 

 

五、表格布局TableLayout:

(1)<TableRow>

放入控件,按表格显示。

</TableRow>

 

 

六、绝对布局Absolutely:

(1)控件位置属性:

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

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

 

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

(1)控件中的属性:

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

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

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

 

 

八、fragment:

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

注:在sdk的版本11后才有。

(2)建立Fragment的两种方法

A、在xml中fragment里面属性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.content,fragment1);

(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");

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

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

 

 

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

(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”

 

 

十、电话拨号器:

Intent intent = new Intent();

intent.setAction(Intent.ACTION_CALL);

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

startActivity(intent);

 

十一、短信发送器:

(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);

}

 

 

十二、测试

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

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

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

(2)根据测试的粒度:

方法测试:function test

单元测试:unit test

集成测试:intergration

(3)根据测试的次数:

冒烟测试:smoke test   (android 猴子)

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

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

压力测试:pressure test

 

 

1三、保存文件到手机内存(见例:登录界面保存密码)

(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;

}

(3)catch :缓存文件夹。

 

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

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

 

十个字符:位置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,以下:

 

  这些访问权限值在终端是能够修改的,首先找到该文件: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);

 

 

 

第三章、知识点总结

一、从assets中得到某文件的内容:

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

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

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

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

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

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

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

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

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

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

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

文本工具类TextUtils的isEmpty()方法,返回boolean类型。

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

七、日志信息LogCat:

分等级:verbose  提醒  黑色

Debug   调试  蓝色

Info     信息  绿色

Ware    警告  橙色

Error    错误  红色

Log.v(tag,”输出内容”)   tag为找到此日志的标识。同理还有d、i、w、e。

八、context上下文:

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

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

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

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

相关文章
相关标签/搜索