您的位置:首页 > 编程语言 > Java开发

Android入门学习笔记,主要是activity和intent,以及eclipse常用快捷方式

2015-03-18 09:20 651 查看
string.xml作用:软件国际化

AndroidManifest.xml中包名与程序包结构无关

Eclipse常用快捷键:

Ctrl+shift+↓ 向下复制

Ctrl+T 查看父类结构

Ctrl+O 显示大纲

Ctrl+D 删除当前行

Ctrl+1 快速修复

Ctrl+/ 为每行或者选择部分添加注释

Ctrl+F 查找

Ctrl+M窗口最大最小化方便进行代码的书写

Ctrl+T 快速显示当前类的继承结构

Ctrl+Shift+R快速查找资源免得左边找

Ctrl+Q快速定位到最后一个编辑的地方

F4查看类结构

Ctrl+F11 运行

Ctrl+Shift+L显示所有的快捷键

F11 调试最后一次运行的程序

Ctrl+Shift+F最常用格式化某段代码不选择某段代码则格式化化整个Java 文件

Ctrl+Shift+S 保存所有

Ctrl+H全局搜索

Alt+↓当前行和下一行相互交换位置

Alt+Enter显示当前资源(工程或者文件)的属性

Ctrl+W关闭当前编辑器

Ctrl+E快速显示文件下拉列表

Ctrl+J 查找当前选中的文本块

Ctrl+Shift+J 反向查找当前选中的文本块从后往前找

Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时光标要在匹配符里面,后面到前面,则反之)

Alt+Shift+R重命名(是我自己最爱用的一个了,尤其是变量和类Rename,比手工方法能节省很多劳动力)

Alt+Shift+M 抽取方法(这是重构里面最常用的方法之一了,尤其是对 一大堆泥团代码有用)

Alt+Shift+C 修改函数结构 (比较实用,有N个函数调用了这个方法,修改一次搞定)

Alt+Shift+L 抽取本地变量(可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)

Alt+Shift+F 把Class中的local变量变为field变量

Alt+Shift+I 合并变量(可能这样说有点不妥Inline)

Alt+Shift+Z 重构的后悔药

显式intent:

一、Intent intent=new Intent();

intent.setClass(this,Activity01.class);

startActivity(intent);

二、Intent intent=new Intent();

intent.setClassName(this,”com.xxx.xxx.xxx.xxx”) //类包名

startActivity(intent);

三、Intent intent=new Intent();

intent.setClassName(”com.xxx.xxx”,”com.xxx.xxx.xxx.xxx”) //程序包名,类包名

startActivity(intent); //可以打开其他应用activity,需要被调activity设置export属性为”true”,调用被调程序主界面不需要设置属性

四、Intent intent=new Intent();

intent.setComponent(new ComponentName(this,Activity01.class));

startActivity(intent);

隐式intent:

AndroidManifest.xml 中activity节点加入intent-filter(白名单)节点

Intent intent=new Intent();

intent.setAction(“com.xxx.xxx”); //被调activity的 intent-filter的name

intent.addCategory(Intent.Category_default);

intent.addData(Uri.parse(“tel:”));

startActivity(intent);

Intent Filter(意图过滤器):

若不声明,之能用显式intent

可以配置action、data、catagory属性

同一属性可以配置多份

一个activity可以配置多个intent-filter

Category 与任意一个category完全匹配均可调用

隐式intent至少匹配一个action和category

Type会覆盖data 所以可使用setTypeAndData()方法

Activity生命周期:

Private String tag=MainActivity.class.getSimpleName();

Log.d(tag,”onCreate”);

一、onRestart(); //再次可见

二、onStart(); //可见

三、onPause(); //暂停

四、onStop(); //停止

五、onDestroy(); //销毁

六、onCreate(); //创建

七、onResume(); //可交互

暂停状态:

Activity被透明activity覆盖,可见但不可操作

停止状态:

不可见,但是保留成员数据

断开状态:

finish(); 关闭activity

暂停和停止状态的activity可以被系统清除

Activity横竖屏切换生命周期:

通常横竖屏切换时或键盘出现或隐藏时,销毁原activity,创建新activity

解决方法:

Activity节点中配置configChanges属性keyboardHidden|orientation|screenSize

则会执行通过onConfigurationChanged()方法实现

禁止横竖屏切换:

Activity节点中配置ScreenOrientation的portrait(竖)属性或 landscape(横)

onConfigurationChanged()方法可得到当前activity是横还是竖:

重写onConfigurationChanged()方法,可以获得屏幕width和height,比较它们大小即可

Anr异常:

在主线程(UI线程)进行耗时操作时(大于6秒),界面无法响应输入事件时,就会发生anr异常

Thread.sleep(6000);//主线程休眠6秒

解决办法:

耗时操作写在子线程里

activity间的数据传递方式:

一、通用方式(通过intent):

传递数据:

原activity:

Intent intent=new Intent();

intent.setClass(this,Activity01.class);

intent.putExtra=(“data”,”Hello World!”);

startActivity(intent);

接收数据activity:

Bundle bundle=getIntent().getExtras();

bundle.getString(“data”);

String data=bundle.getString(“data”);

传递对象:

对象必须实现serializable或parcelable

二、静态变量方式传递:

使用变量后切记手动销毁

三、全局变量传递:

Android的入口:application类的oncreate方法

被传递类继承于application(全局类)

Activity 1:

Intent intent=new Intent(MainActivity.this,OtherActivity.class);

MyApplication app=(MyApplication)getApplication();

app.setName(“Hello!”);

startActivity(intent);

Activity 2:

Oncreate中加入MyApplication app=(MyApplication)getApplication();

若在自定义类件传递,则被传类中加入:

private static MyApplication instance;

public static MyApplication getInstance(){

Return instance;}

oncreate中加入this.instance=this;

可以用HashMap

Application节点加入name属性指定被传类

传递之后手动destroy掉

四、剪切板传递

activity返回数据:

获取返回值activity使用statActivityForResult(intent,0);方法 //0为请求码

Bundle bundle=data.getExtras();

String s=bundle.getString(“phoneNumber”)

被返回值activity使用:

putExtra(“phoneNumber”,value)

setResult(0,intent);//0为结果码

Finish();//结束activity

请求码作用:标识请求源

结果码作用:标识结果源

Activity启动模式(Activity的Launchmode属性):

一、默认模式(standard):每次激活都重新创建新的实例

二、SingleTop:若被创建的activity在栈顶则不重复创建,而调用onNewIntent()方法

三、SingleTask:同一个activity只能存在一个,若被创建的activity在栈内,则会销毁该activity其上的所有activity,并调用onNewIntent()方法。若从其它应用启动activity,创建新栈

四、SingleInstance:只能有一个activity实例,独立存储在一个栈中,使用的onNewIntent()方法。GetTaskId()获取栈ID

保存和恢复activity状态:

需要保存状态的控件设置ID

与方法saveInstanceState()有关

可以覆盖saveInstanceState()方法,加入outState.putSting(“str”,str);调取时覆盖onRestoreInstanceState()方法,if(savedInstanceState==null) return; String str=savedInstanceState.getString(“str”);

Android 视图

可视化控件都是view的子类

单位:控件大小用dp,字体大小用sp

尺寸一般用dimens.xml

Layout Weight:权重(调整控件比例)

调整控件位置:margin xxx 在框架布局异常,需调试

Visibility:隐藏控件

TextView控件:

Autolink属性all:存在URL,邮箱等自动创建链接

tv1.setText(Html.formHtml(html标签表示文本));

tv1.setMovenmentMethod(LinkMovenmethod.getInstance());

通过html可以实现图文混排

Html.formHtml存在图片,使用ImageGetter()获取,需要指定边界

SpannableString:设置文本格式

EditText校验输入:

digits属性:限制输入特定内容

inputType:限制输入类型

autoCompleteTextView:

String[] arr={ };

ArrayAdapter adapter=new ArrayAdapter(this,R.layout.ui_textView,arr);

Auto_textView.setAdapter(adapter);

Button:

点击监听

焦点监听

触摸监听//返回true事件被消耗

drawableTop属性:图文混排

drawablePadding:图文间距

Spannable String :实现图文混排

Margin:外边框

Padding:内边框
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息