学习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第一行代码》笔记的更多相关文章

  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. 关于new Function使用以及将json格式字符串转化为json对象方法介绍

    一直对Function()一知半解,今日就Function()的使用做一下总结 一.函数实际是功能完整的对象,用Fucntion()直接创建函数. 语法规则:    var 函数名 = new Fun ...

  2. w3c教程

    http://www.w3cfuns.com/course.php http://www.w3cfuns.com/home.php?mod=space&uid=5434413&do=b ...

  3. zoj 2110

    这道题困扰我的不是算法问题.而是细节问题.不优化一直搜到底 时间是690ms左右 没有优化的dfs #include<stdio.h> #include<string.h> # ...

  4. SQL2000下修复某数据库的经历

    某个SQL2000的数据库,在通过备份/还原的方法升级到2005时发生错误: 查找解决方法未果 正好最近在看 @一线码农 的<sql server之旅>,就想自己试试解决这个问题 首先运行 ...

  5. subversion和客户端的应用

    1.安装svn的服务器端subversion.以及windows客户端TortoiseSVN: 2 cmd 建立库,名字为svnpro ----- svnadmin create F:\svnpro, ...

  6. BZOJ 2173: 整数的lqp拆分( dp )

    靠着暴力+直觉搞出递推式 f(n) = ∑F(i)f(n-i) (1≤i≤n) (直接想大概也不会很复杂吧...). f(0)=0 感受一下这个递推式...因为和斐波那契有关..我们算一下f(n)+f ...

  7. PHP新闻系统开发流程

    PHP新闻系统开发流程一.系统总体设计 (一)系统功能描述和功能模块划分 (二)系统流程分析 (三)系统所用文件二.数据库设计 (一)创建数据库 (二)设计表结构三.新闻发布模块开发 (一)新闻首页 ...

  8. Myeclipse利用maven构建sping web项目

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQQAAADvCAIAAACbnj2oAAAfq0lEQVR4nO2d+1MUV9rH+294U9mqpG ...

  9. golang ODBC 访问access数据库(问题解决之心理路程)

    最近项目需要,需要操作access,以前是用VC++ OLE访问,网络用ACE库,感觉很庞大...决定用go试试 网上用的最多的就是这个https://github.com/weigj/go-odbc ...

  10. 一张图比較 Docker 和 Git:镜像管理设计理念

    Docker 的镜像管理设计中大量借鉴了 Git 的理念. 以下这张图将对两者的核心概念和操作进行比較,有助于大家高速掌握管理 Docker 镜像的正确方式. watermark/2/text/aHR ...