第一行代码笔记

从过完年回来上班,看别人在看第一行代码,到现在也有一个月了,终于把他看完了,这是在住的地方记的笔记,在上班的地方的笔记还没写上去。


然后将这个值传入 setContentView()方法即可。注意这里我们使用的 R,是
com.example.activitytest 包下的 R 文件,
然后我们使用了 android:label 指定活动中标题栏的内容,标题栏是显示在活动最
顶部的,待会儿运行的时候你就会看到

重写 onCreateOptionsMenu()方法
getMenuInflater().inflate(R.menu.main, menu);
一个 Menu 对象当中,这里直接使用 onCreateOptionsMenu()方法中传入的 menu 参数。然后给这个方法返回 true,表示允许创建的菜单显示出来,如果返回了 false,创建的菜单将无法显示。
显式 Intent    其中一个是 Intent(Context packageContext, Class cls)。这个构造函数接收两个参数,第一个参数 Context 要求提供一个启动活动的上下文,第二个参数 Class 则是指定想要启动的目标活动
隐式 Intent    我们使用了 Intent 的另一个构造函数,直接将 action 的字符串传了进去
每个 Intent 中只能指定一个 action,但却能指定多个 category。
 Intent 的 action 是 Intent.ACTION_VIEW,这是一个 Android 系统内置的动作,其常量值为 android.intent.action.VIEW。
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
setData()    它接收一个 Uri 对象    以字符串的形式传入到 Uri.parse()方法中解析产生

 Intent 的 action 是 Intent.ACTION_DIAL     data 部分指定了协议是 tel

通过按下Back 键回        onBackPressed

返回栈    我们每启动一个新的活动,就会覆盖在原活动之上    按下 Back 键或调用 finish()方法去销毁一个活动时,处于栈顶的活动会出栈
运行状态    暂停状态    停止状态
android:theme="@android:style/Theme.Dialog"
ProgressDialog 和 AlertDialog 有点类似
ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
 setCancelable()中传入了 false,表示 ProgressDialog 是不能通过 Back 键取消掉的,这时你就一定要在代码中做好控制,当数据加载完成后必须要调用 ProgressDialog 的dismiss()方法来关闭对话框
 LinearLayout 的排列方向是 horizontal,因此我们只能指定垂直方向上的排列方向
android:inputType 属性的值指定为 textPassword,把 EditText 变为密码输入框
所用的所有布局都是直接或间接继承自 ViewGroup
引入布局        

添加自定义控件和添加普通控件的方式基本是一样的,只不过在添加自定义控件的时候我们需要指明控件的完整类名,包名在这里是不可以省略的

ViewHolder viewHolder;
if (convertView == null) {
view = LayoutInflater.from(getContext()).inflate(resourceId, null);
viewHolder = new ViewHolder();
viewHolder.fruitImage = (ImageView) view.findViewById
(R.id.fruit_image);
viewHolder.fruitName = (TextView) view.findViewById
(R.id.fruit_name);
view.setTag(viewHolder); // 将ViewHolder存储在View中
} else {
view = convertView;
viewHolder = (ViewHolder) view.getTag(); // 重新获取ViewHolder
}
px 是像素的意思,即屏幕中可以显示的最小元素单元,我们应用里任何可见的东西都是由一个个像素点组成的。什么叫密度?Android 中的密度就是屏幕每英寸所包含的像素数,通常以 dpi 为单位。
在 160dpi 的屏幕上,1dp 等于 1px,而在 320dpi 的屏幕上,1dp就等于 2px。因此,使用 dp 来指定控件的宽和高,就可以保证控件在不同密度的屏幕中的显示比例保持一致。
Nine-Patch 图片    能够指定哪些区域可以被拉伸而哪些区域不可以。
在上边框和左边框绘制的部分就表示当图片需要拉伸时就拉伸黑点标记的区域,在下边框和右边框绘制的部分则表示内容会被放置的区域

ListView 中用到了一个 android:divider属性,它可以指定 ListView 分隔线的颜色,这里#0000 表示将分隔线设为透明色
adapter.notifyDataSetChanged(); // 当有新消息时,刷新
ListView中的显示
msgListView.setSelection(msgList.size()); // 将ListView
定位到最后一行

 addToBackStack()
那些屏幕被认为是 large 的设备就会自动加载 layout-large 文件夹下的布局
normal         提供给中等屏幕设备的资源
large         提供给大屏幕设备的资源
mdpi         提供给中等分辨率设备的资源(120dpi 到 160dpi)
hdpi         提供给高分辨率设备的资源(160dpi 到 240dpi)
xhdpi         提供给超高分辨率设备的资源(240dpi 到 320dpi)


(Smallest-width Qualifier)    最小宽度限定符允许我们对屏幕的宽度指定一个最小指(以 dp 为单位),然后以这个最小值为临界点,屏幕宽度大于这个值的设备就加载一个布局,屏幕宽度小于这个值的设备就加载另一个布局    layout-sw600dp
当程序运行在屏幕宽度大于 600dp 的设备上时,会加载 layout-sw600dp/activity_main 布局
android:scaleType 属性设置为 fitXY,表示让这张图片填充满整个控件的大小
Fragment 看作view来用,在xml中用framelayout包装它

广播是一种可以跨进程的通信方式
发送有序广播    android:priority="100"    abortBroadcast()方法,就表示将这条广播截断
LocalBroadcastManager

ViewRoot就是继承于Handler,其作用主要是接收WmS的通知
UI线程是从ActivityThread运行的,在该类中的main()方法中,已经使用Looper.prepareMainLooper()为该线程添加了Looper对象

内容URI  包名加表名

跨程序访问数据的功能确实是实现
标准URI  后面加ID   路径结尾表示访问表中的所有数据
以ID结尾就表示期望访问该表中拥有响应ID的数据 *匹配任意长度的字符
#表示匹配任意长度的数字
而一个能够匹配table1 表中任意一行数据的内容URI 格式就可以写成:
content://com.example.app.provider/table1/#
一个内容URI 所对应的MIME
字符串主要由三部分组分,Android 对这三个部分做了如下格式规定。
必须以vnd 开头。
如果内容URI 以路径结尾,则后接android.cursor.dir/,如果内容URI 以id 结尾,
则后接android.cursor.item/。

数据库是Cursor cursor = db.query("Book", null, null, null, null, null, null);

内容提供者是  外部访问
Cursor cursor = getContentResolver().query(uri, null, null,
null, null);
内部 自建数据库

String name = cursor.getString(cursor.
getColumnIndex("name"))
内容提供器的相关内容,
以实现跨程序数据共享的功能。现在你不仅知道了如何去访问其他程序中的数据
PendingIntent 更加倾向于在某个合适
的时机去执行某个动作。所以,也可以把PendingIntent 简单地理解为延迟执行的Intent。
服务和活动通信 通过Binder
。为了可以简单地创建一个异步的、会自动停止的服务,Android 专门提供了一个


在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient。
第一种、HttpURLConnection接口
Http通信中使用最多的是Get和Post.
Get请求可用获得静态页面,也可以把参数放在URL字串的后面,传递给服务器。
Post参数不是放在URL字串里面,而是放在http请求数据中。
URLConnection与HttpURLConnection都是抽象类,无法直接实例化对象。其对象主要通过URL的openConnection方法获得,但openConnection方法只是创建URLConnection或者HttpURLConnection
的实例,并不是进行真正的连接操作。
DefaultHttpClient
是默认的一个HTTP客户端,可用它创建一个Http连接 代码如下:
HttpClinet httpclinet = new HttpClient();
HttpResponse是一个HTTP连接响应,当执行一个HTTP连接后,就会返回一个HttpResponse,可以通过HttpResponse获得一些响应的信息。
下例为请求一个HTTP连接并获得该请求是否成功的代码:
HttpResponse httpResponse = httpclient.execute(httpRequest);
if(httpResponse.getStatusLine(),getStatusCode() == HttpStates.SC_OK){//判断是否连接成功
}

IntentService 类

我们首先给sendHttpRequest()方法添加了一个HttpCallbackListener 参数,并在方法的内
部开启了一个子线程,然后在子线程里去执行具体的网络操作。注意子线程中是无法通过
return 语句来返回数据的,因此这里我们将服务器响应的数据传入了HttpCallbackListener 的
onFinish()方法中,如果出现了异常就将异常原因传入到onError()方法中
GeoPoint point = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6));
mMapController.setCenter(point);
上述代码就实现了将地图定位到北纬39.915
controller.setCenter(point); 定位到点


光照传感器

Sensor sensor = senserManager.getDefaultSensor(Sensor.TYPE_LIGHT);
,由于地心引力的存在,你的手机无论在世界上任何角落都会有一个重力
加速度,这个加速度的值大约是9.8m/s2。当手机平放的时候,这个加速度是作用在Z 轴上
的,当手机竖立起来的时候,这个加速度是作用在Y 轴上的,当手机横立起来的时候,这个
加速度是作用在X 轴上的。
其中,values[0]记录着手机围绕Z 轴的旋转角度,values[1] 记录着手机围绕X 轴的旋转

角度,values[2] 记录着手机围绕Y 轴的旋转角度。


可以定制一个自己的Application 类,以便于管理程序内一些全局的状态
信息,比如说全局Context
Serializable 是序列化的意思,表示将一个对象转换成可存储或可传输的状态
接下来每按一次F6 健,代码就会向下执行一行
,就会让这个进程进入到调试模式了。
进入调试模式的进程名前会有一个虫子样式图标,绿色
https://github.com/racaljk/hosts
https://github.com/jiyilanzhou/coolweather/issues

fork之后可以把项目通过git clone复制到本地

听说Android编程权威指南也不错,准备接下来看这本书。

第一行代码+源码下载地址

Android编程权威指南下载  

Android编程权威指南源码下载


你可能感兴趣的:(Android)