学习Android开发差点儿相同有两年时间了。期间也做了大大小小的一些项目。近来抽出闲暇想把Android基础强化一下,之前在网上看到了郭霖郭大神的几篇博客。从中受益不少。于是花了近一周时间看完了郭神的一本Android教材——《Android第一行代码》。这本书相比其它教材个人感觉更为基础,内容非常有用。看完之后我也有一些收获,学到了一些能够非常好的运用到实际中的Android小技巧。以下从中选出我认为非常有价值的地方做个记录。

同一时候欢迎各位指正补充~~

1、查看当前界面处于哪个Activity。

非常多时候当我们接手一个较为复杂的源代码的时候。里面会有非常多个Acvitity。此时我们往往非常难从中找出哪个界面相应哪个源代码,这无疑会降低我们的开发效率。

以下介绍书中一个小技巧:

1、 编写一个新Activity如BaseActivity去继承Activity,代码例如以下:

  1. {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState)
  4. {
  5. super.onCreate(savedInstanceState);
  6. Log.d("BaseActivity", getClass().getSimpleName());
  7. }
  8. }

2、让project里所有的Activity都继承自BaseActivity;

3、点击进入你想查看代码的界面,同一时候观察LogCat中的输出。打印出的信息就是相应的Activity的类名了。

个人心得:看到这里,或许你会认为,假设拿到一个源代码project,然后进去一个个的改还是会非常麻烦。我认为作者在这里主要是想介绍这样一种方法。我们在编程的时候能够考虑增加这样一种技巧。这样能够更好的与人合作一个项目。

2、当启动一个须要传递数据的Activity时,避免參数混淆。

大家对Intent的都非常熟悉,他是Android系统的搬运工。

当我们启动一个Acivity并希望向它传递一些数据,这时候通常都会用到intent。

一个项目中可能会有非常多个Activity都须要传递数据。而开发人员全然有可能不确定这些Activity分别要传递什么数据,这时候我们能够用一个技巧来规范这样一种“通信协议”。

  1. public class AnotherActivity extends BaseActivity
  2. {
  3. public static void actionStart(Context context,String val1,String val2)
  4. {
  5. Intent intent = new Intent(context, AnotherActivity.class);
  6. intent.putExtra("val1", val1);
  7. intent.putExtra("val2", val2);
  8. context.startActivity(intent);
  9. }
  10. }

这样一来,在使用的过程中。当须要跳转的时候能够用以下代码

  1. AnotherActivity.actionStart(FirstActivity.this, "val1", "val2");

个人心得:个人认为这是一个非常不错的习惯,假设系统中带參数的跳转比較多就应该将跳转所有换成统一规范,这样能够降低合作开发中不必要的麻烦。

3、TableLayout的使用

TableLayout是在开发中非常少用到的一个布局。

当然对于这个控件有几个地方我认为也须要注意。

  • TableRow标签(TableLayout的一行)中的控件是不能指定宽度的。
  • 正因为TableRow不能设置宽度当须要布局自己主动拉伸宽度时。能够通过在TableLayout标签下设置

    android:stretchColunms="1"

    属性来指定某一列被拉伸解决(以上是指定拉伸第二列)。
  • 当某一行少一列数据的时候。最后会多出一列的空白。假设希望系统自己主动拉伸空间占满这一行,能够在当前行的某个控件标签下设置:
  1. android:layout_span="2"

这样一来该控件就会占2个位置。

个人心得:在我所做过的项目中,尚未用过TableLayout,只是作为一个Android开发人员。应该对其有一定的了解,在恰当的时候能够非常好的使用之。

4、自己定义继承ArrayAdapter的适配器

我们在用listview的时候都会用到适配器,Android为我们做了两个经常使用的适配器:SimpleAdapter和ArrayAdapter等。当我们有特殊要求的时候须要自己定义一个适配器继承自BaseAdapter。这样能够更加灵活的完毕我们须要的特殊功能。但事实上大多时候我们能够编写一个继承自ArrayAdapter的适配器,这样更加简单:

  1. public class MCAdapter extends ArrayAdapter<Fruit>
  2. {
  3. private int resourceId;
  4. public FruitAdapter(Context context, int textViewResourceId,
  5. List<Fruit> objects) {
  6. super(context, textViewResourceId, objects);
  7. resourceId = textViewResourceId;
  8. }
  9. @Override
  10. public View getView(int position, View convertView, ViewGroup parent) {
  11. ... ...
  12. return view;
  13. }

这样一来。我们仅仅须要重写getView这样一个方法,而假设是继承自BaseAdapter,我们须要至少重写4个方法。能够是我们的代码更加简化。

个人心得:或许这个大家都知道吧。 反正我曾经都是自己定义适配器继承自BaseAdapter,然后重写4个方法,当中3个都是用不上的。。

5、Fragment回退栈

这里仅仅是想记录一个Fragment的方法:transaction.addToBackStack(null);

6、Broadcast Receiver

  • 广播接收器类中不同意开启线程
  • 发送有序广播:sendOrderedBroadcast
  • 在广播接收器中注冊有序广播优先级:
  1. <intent-filter **android:priority="50">
  2. ... ...
  3. <intent/>
  4. <receive/>
  • 阻止广播:abortBroadcast();
  • 本地广播:LocalBroadcastManager.sendBroadcast(intent);(无法用静态注冊方式)

个人心得:广播接收器是非经常常使用的。当中有序广播的优先级由应用自己来定这一点让我非常诧异。那岂不是又给了应用程序漏洞可钻?在曾经应用程序要拦截短信都是通过设置更高的广播优先级。然后阻断广播来实现,可是在Android4.4之后,增加了默认短信管理功能,这使得用户来决定谁来管理短信、电话本等等。看来谷歌也发现了这个潜在的问题。

7、调用系统相机

在使用系统相机的过程中。我们能够通过startActivityForResult启动相机,从而接收拍照成功与否的返回值。并且能够对拍照后的图片进行裁剪。

  • 启动相机拍照:
  1. Intent intent = new intent("android.media.action.IMAGE_CAPTURE");
  2. intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
  3. startActivityForResult(intent, TAKE_PHOTO);
  • 拍照完毕后裁剪:
  1. Intent intent = new intent("android.media.action.CROP");
  2. intent.setDataAndType(imageUri, "image/*");
  3. intent.putExtra("scale", true);
  4. intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
  5. 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第一行代码》笔记的更多相关文章

  1. HTML+CSS笔记 CSS笔记集合

    HTML+CSS笔记 表格,超链接,图片,表单 涉及内容:表格,超链接,图片,表单 HTML+CSS笔记 CSS入门 涉及内容:简介,优势,语法说明,代码注释,CSS样式位置,不同样式优先级,选择器, ...

  2. CSS笔记--选择器

    CSS笔记--选择器 mate的使用 <meta charset="UTF-8"> <title>Document</title> <me ...

  3. HTML+CSS笔记 CSS中级 一些小技巧

    水平居中 行内元素的水平居中 </a></li> <li><a href="#">2</a></li> &l ...

  4. HTML+CSS笔记 CSS中级 颜色&长度值

    颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...

  5. HTML+CSS笔记 CSS中级 缩写入门

    盒子模型代码简写 回忆盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左. 语法: margin:10px 15p ...

  6. HTML+CSS笔记 CSS进阶再续

    CSS的布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之上, ...

  7. HTML+CSS笔记 CSS进阶续集

    元素分类 在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1&g ...

  8. HTML+CSS笔记 CSS进阶

    文字排版 字体 我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性. 语法: body{font-family:"宋体";} 这里注意不要设置不常用的字体,因为如果 ...

  9. HTML+CSS笔记 CSS入门续集

    继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代(标签). 语法: p{color:red;} <p> ...

  10. HTML+CSS笔记 CSS入门

    简介: </span>年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的<span>脚本解释程序</span>,作为ABC语言的一种继承. & ...

随机推荐

  1. Android四大组件之Activity详解

    一.Activity的概要说明 我看过Activity的源码,Activity类注释大概是这样解释的:几乎所有的Activity都是与用户交互用的,我想用了一个几乎的意思应该是排除一些纯展示界面吧,因 ...

  2. Jquery 方法大全

    一.JQuery常用的方法 :(JQuery中90%都是方法,没有参数是获取,带参数是设置) $("#id").css('backgroundColor','blue'); .cs ...

  3. SQL基础常用语法

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 DROP database dbname 3.说明:创建新表 create table ...

  4. JavaScript 运动框架 Step by step

    http://blog.csdn.net/rsj217/article/details/7986905 关于offsetLeft:http://www.cnblogs.com/JackJiang/ar ...

  5. centos6.5安装pysider遇见的坑

    一.服务器自带pyhon2.7.9 安装pip, # yum -y install python-devel python-setuptool wget http://pypi.python.org/ ...

  6. mybatis+postgresql平台

    mybatis+postgresql平台        最近有个项目的数据库使用postgresql,使用原生态的mybatis操作数据,原生态的没什么不好,只不过国内有个tk.mybatis的工具帮 ...

  7. ORA-20000: ORU-10027: buffer overflow, limit of 10000 bytes

        要用dbms_output.put_line来输出语句,遇到以下错误: ERROR 位于第 1 行: ORA-20000: ORU-10027: buffer overflow, limit ...

  8. Storm几篇文章

    http://tianhailong.com/ http://www.cnblogs.com/panfeng412/archive/2012/07/02/storm-common-patterns-o ...

  9. ImageMagick还是GraphicsMagick?

    引自:http://co63oc.blog.51cto.com/904636/328997 ImageMagick(IM) 套装包含的命令行图形工具是一主要自由软件:Linux,其他类Unix操作系统 ...

  10. 【剑指offer】第一个仅仅出现一次的字符

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27106997 题目描写叙述: 在一个字符串(1<=字符串长度<=10000,所 ...