《Android第一行代码》笔记
学习Android开发差点儿相同有两年时间了。期间也做了大大小小的一些项目。近来抽出闲暇想把Android基础强化一下,之前在网上看到了郭霖郭大神的几篇博客。从中受益不少。于是花了近一周时间看完了郭神的一本Android教材——《Android第一行代码》。这本书相比其它教材个人感觉更为基础,内容非常有用。看完之后我也有一些收获,学到了一些能够非常好的运用到实际中的Android小技巧。以下从中选出我认为非常有价值的地方做个记录。
同一时候欢迎各位指正补充~~
1、查看当前界面处于哪个Activity。
非常多时候当我们接手一个较为复杂的源代码的时候。里面会有非常多个Acvitity。此时我们往往非常难从中找出哪个界面相应哪个源代码,这无疑会降低我们的开发效率。
以下介绍书中一个小技巧:
1、 编写一个新Activity如BaseActivity去继承Activity,代码例如以下:
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Log.d("BaseActivity", getClass().getSimpleName());
}
}
2、让project里所有的Activity都继承自BaseActivity;
3、点击进入你想查看代码的界面,同一时候观察LogCat中的输出。打印出的信息就是相应的Activity的类名了。
个人心得:看到这里,或许你会认为,假设拿到一个源代码project,然后进去一个个的改还是会非常麻烦。我认为作者在这里主要是想介绍这样一种方法。我们在编程的时候能够考虑增加这样一种技巧。这样能够更好的与人合作一个项目。
2、当启动一个须要传递数据的Activity时,避免參数混淆。
大家对Intent的都非常熟悉,他是Android系统的搬运工。
当我们启动一个Acivity并希望向它传递一些数据,这时候通常都会用到intent。
一个项目中可能会有非常多个Activity都须要传递数据。而开发人员全然有可能不确定这些Activity分别要传递什么数据,这时候我们能够用一个技巧来规范这样一种“通信协议”。
public class AnotherActivity extends BaseActivity
{
public static void actionStart(Context context,String val1,String val2)
{
Intent intent = new Intent(context, AnotherActivity.class);
intent.putExtra("val1", val1);
intent.putExtra("val2", val2);
context.startActivity(intent);
}
}
这样一来,在使用的过程中。当须要跳转的时候能够用以下代码
AnotherActivity.actionStart(FirstActivity.this, "val1", "val2");
个人心得:个人认为这是一个非常不错的习惯,假设系统中带參数的跳转比較多就应该将跳转所有换成统一规范,这样能够降低合作开发中不必要的麻烦。
3、TableLayout的使用
TableLayout是在开发中非常少用到的一个布局。
当然对于这个控件有几个地方我认为也须要注意。
- TableRow标签(TableLayout的一行)中的控件是不能指定宽度的。
- 正因为TableRow不能设置宽度当须要布局自己主动拉伸宽度时。能够通过在TableLayout标签下设置
android:stretchColunms="1"
属性来指定某一列被拉伸解决(以上是指定拉伸第二列)。 - 当某一行少一列数据的时候。最后会多出一列的空白。假设希望系统自己主动拉伸空间占满这一行,能够在当前行的某个控件标签下设置:
android:layout_span="2"
这样一来该控件就会占2个位置。
个人心得:在我所做过的项目中,尚未用过TableLayout,只是作为一个Android开发人员。应该对其有一定的了解,在恰当的时候能够非常好的使用之。
4、自己定义继承ArrayAdapter的适配器
我们在用listview的时候都会用到适配器,Android为我们做了两个经常使用的适配器:SimpleAdapter和ArrayAdapter等。当我们有特殊要求的时候须要自己定义一个适配器继承自BaseAdapter。这样能够更加灵活的完毕我们须要的特殊功能。但事实上大多时候我们能够编写一个继承自ArrayAdapter的适配器,这样更加简单:
public class MCAdapter extends ArrayAdapter<Fruit>
{
private int resourceId;
public FruitAdapter(Context context, int textViewResourceId,
List<Fruit> objects) {
super(context, textViewResourceId, objects);
resourceId = textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
... ...
return view;
}
这样一来。我们仅仅须要重写getView这样一个方法,而假设是继承自BaseAdapter,我们须要至少重写4个方法。能够是我们的代码更加简化。
个人心得:或许这个大家都知道吧。 反正我曾经都是自己定义适配器继承自BaseAdapter,然后重写4个方法,当中3个都是用不上的。。
5、Fragment回退栈
这里仅仅是想记录一个Fragment的方法:transaction.addToBackStack(null);
6、Broadcast Receiver
- 广播接收器类中不同意开启线程
- 发送有序广播:sendOrderedBroadcast
- 在广播接收器中注冊有序广播优先级:
<intent-filter **android:priority="50">
... ...
<intent/>
<receive/>
- 阻止广播:abortBroadcast();
- 本地广播:LocalBroadcastManager.sendBroadcast(intent);(无法用静态注冊方式)
个人心得:广播接收器是非经常常使用的。当中有序广播的优先级由应用自己来定这一点让我非常诧异。那岂不是又给了应用程序漏洞可钻?在曾经应用程序要拦截短信都是通过设置更高的广播优先级。然后阻断广播来实现,可是在Android4.4之后,增加了默认短信管理功能,这使得用户来决定谁来管理短信、电话本等等。看来谷歌也发现了这个潜在的问题。
7、调用系统相机
在使用系统相机的过程中。我们能够通过startActivityForResult启动相机,从而接收拍照成功与否的返回值。并且能够对拍照后的图片进行裁剪。
- 启动相机拍照:
Intent intent = new intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_PHOTO);
- 拍照完毕后裁剪:
Intent intent = new intent("android.media.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, CROP_PHOTO);
个人心得:这里主要是对系统中的action的了解程度以及对action的參数的熟悉。详见Android action大全
8、Android位置服务
书中的这一章主要分为两个部分:1、通过Android系统API获取本机位置信息;2、通过调用百度地图显示地图信息。前者是Android自带的函数,而后者须要下载百度API。
对于第一部分Android API没有不论什么变化。而第二部分书中是用的百度地图2.3版。而在我写这篇文章的时候百度地图最新版是3.2。非常多函数已经不再适用,所以这一章的内容基本能够忽略了。
大家能够依照需求照着百度文档来学习这一部分内容: title=androidsdk">百度地图文档
个人心得:尽管书上的程序已经不能使用。可是作为了解,个人认为照着百度文档实现书中的内容也是非常有必要的,并且用起来也非常easy。至于很多其它复杂的高级功能大家到用到的时候在学不迟。也会学的更快一些。
好了,以上是我在读这本书中所收获的一些东西,作者提供的一些小技巧假设能够运用得当,能够非常好的帮助我们开发项目。提高我们的效率。今后我也会不断增加所学的有用技巧。也欢迎大家对内容进行指正、补充。
谢谢!
——超低空
《Android第一行代码》笔记的更多相关文章
- HTML+CSS笔记 CSS笔记集合
HTML+CSS笔记 表格,超链接,图片,表单 涉及内容:表格,超链接,图片,表单 HTML+CSS笔记 CSS入门 涉及内容:简介,优势,语法说明,代码注释,CSS样式位置,不同样式优先级,选择器, ...
- CSS笔记--选择器
CSS笔记--选择器 mate的使用 <meta charset="UTF-8"> <title>Document</title> <me ...
- HTML+CSS笔记 CSS中级 一些小技巧
水平居中 行内元素的水平居中 </a></li> <li><a href="#">2</a></li> &l ...
- HTML+CSS笔记 CSS中级 颜色&长度值
颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...
- HTML+CSS笔记 CSS中级 缩写入门
盒子模型代码简写 回忆盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左. 语法: margin:10px 15p ...
- HTML+CSS笔记 CSS进阶再续
CSS的布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之上, ...
- HTML+CSS笔记 CSS进阶续集
元素分类 在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1&g ...
- HTML+CSS笔记 CSS进阶
文字排版 字体 我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性. 语法: body{font-family:"宋体";} 这里注意不要设置不常用的字体,因为如果 ...
- HTML+CSS笔记 CSS入门续集
继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代(标签). 语法: p{color:red;} <p> ...
- HTML+CSS笔记 CSS入门
简介: </span>年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的<span>脚本解释程序</span>,作为ABC语言的一种继承. & ...
随机推荐
- iOS面试题04-runtime
runtime/KVO等面试题 1.KVO内部实现原则 回答:1>KVO是基于runtime机制实现的 2>当某个类的对象第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,在这个 ...
- C#复习一( Twenty Days)
今天开始将要复习最近所学的一些C#知识.下面就来总结一下今天所复习的内容,以此来巩固我对C#知识的掌握.今天主要以举几个程序为例. 首先还是要注意代码的规范: –注释//,/**/,/// –骆驼 ...
- 【SVN】使用花生壳映射VisualSVN外网地址
内网端口设置为443,花生壳映射设置的时候不能使用80端口,,需要用其他端口,,
- Android 学习开发笔记《Service 与 Thread 的区别 》
很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下. 1). Thread:Thre ...
- javascript模块化编程(转载)
Javascript 模块化编程 作者: 阮一峰 发布时间: 2013-01-08 18:04 阅读: 7632 次 推荐: 40 原文链接 [收藏] 随着网站逐渐变成"互 ...
- php基础教程笔记2
如果学过c.java,php的语法不学即会,但是不同的是php是一种脚本语言,需要解释器才能运行.php又和js不同,js是客户端语言,而php运行在服务器端,它无法获取客户端浏览器信息.但是php又 ...
- 创建理想的SEQUENCE和自增长的trigger
SEQUENCE CREATE SEQUENCE TEST_SEQ START 1 --从1开始,第一个一定是NEXTVAL,因为第一个CURRVAL不好使,返回值会是1,第一个NEXTVAL相当于从 ...
- 【转载】python 模块 - random生成随机数模块
随机数种子 要每次产生随机数相同就要设置种子,相同种子数的Random对象,相同次数生成的随机数字是完全相同的: random.seed(1) 这样random.randint(0,6, (4,5)) ...
- 正则语法笔记-regular expression note
参考文档:python正则表达式 正则表达式定义:正则是一门高度专业编程语言,内嵌在其他语言(python re模块)中使用.正则表达式包含元字符(metacharacter)列表,列表如下: . ^ ...
- 基于Visual C++2013拆解世界五百强面试题--题10-找出N个数种最大的K个数
有一亿个整数,请找出最大的 1000 个,要求时间越短越好, 空间占用越好越好. 如果不考虑时间效率,很容易想到解决方法,我们只需存储前一千个数, 然后依次读入后面的数和这一千个数组比较,替换其中比较 ...