说明 | |
---|---|
更新日期 | 2019-01-23 |
重要链接:
IntentFilter
Intent以及IntentFilter详解
Android——四大组件、六大布局、五大存储
Java的流式输入输出建立在4个抽象类的基础上:InputStream,OutputStream,Reader和Writer。它们用来创建具体的流式子类。InputStream和OutputStream类被设计为字节类,而Reader和Writer被设计为字符流类。
一般,处理字符和字符串用字符流类,字节和二进制文件用字节类。
drawable 开头的文件夹都是用来放图片的,所有以 values 开头的文件夹都是用来放字符串的, layout 文件夹是用来放布局文件的,menu 文件夹是用来放菜单文件的。
- ConnectivityManager主要管理和网络连接相关的操作;
- TelephonyManager则管理和手机、运营商等的相关信息;
- WifiManager则管理和wifi相关的信息。
- NetworkInfo类包含了对wifi和mobile两种网络模式连接的详细描述,通过其getState()方法获取的State对象则代表着连接成功与否等状态。
Android四大组件分别为activity、service、content provider、broadcast receiver
IntentFilter(意图过滤器)
主要用来过滤隐式意图。当用户进行一项操作的时候,Android系统会根据配置的 “意图过滤器” 来寻找可以响应该操作的组件,服务。
Android系统会根据我们配置的Intent Filter),来进行匹配测试。匹配的时候,只会考虑三个方面:动作、数据(URI以及数据类型)和类别。
另外,当对其他App程序开放组件和服务的时候也需要配置Intent Filter,一个Activity可以配置多个<intent-filter>。
- 动作测试:
对应<intent-filter>中的<action/>标签;
(1) 如果<intent-filter>标签中有多个<action/>,那么Intent请求的Action,只要匹配其中的一条<action/>就可以通过了这条<intent-filter>的动作测试。
(2) 如果<intent-filter>中没有包含任何<action/>,那么无论什么Intent请求都无法和这条<intent-filter>匹配。
(2) 如果Intent请求中没有设定Action(动作),那么这个Intent请求就将顺利地通过<intent-filter>的动作测试(前提是<intent-filter>中必须包含有<action/>,否则与第二条冲突)。
- 类别测试:
对应<intent-filter>中的<category />标签;
(1)Intent中的类别必须全部匹配<intent-filter>中的<category />,但是<intent-filter>中多余的<category />将不会导致匹配失败。
例如:Intent中有3个类别,而意图过滤器中定义了5个,如果Intent中的3个类别都与过滤器中的匹配,那么过滤器中的另外2个,将不会导致类别测试失败。
注意:有一个例外,Android把所有传给startActivity()的隐式意图当作他们包含至少一个类别:"android.intent.category.DEFAULT" (CATEGORY_DEFAULT常量)。 因此,想要接收隐式意图的活动必须在它们的意图过滤器中包含"android.intent.category.DEFAULT"。(带"android.intent.action.MAIN"和"android.intent.category.LAUNCHER"设置的过滤器是例外)
- 数据测试:
对应<intent-filter>中的<data>标签;
<data>元素指定了可以接受的Intent传过来的数据URI和数据类型,当一个意图对象中的URI被用来和一个过滤器中的URI比较时,比较的是URI的各个组成部分。
例如:
如果过滤器仅指定了一个scheme,所有该scheme的URIs都能够和这个过滤器相匹配;
如果过滤器指定了一个scheme、主机名但没有路经部分,所有具有相同scheme和主机名的URIs都可以和这个过滤器相匹配,而不管它们的路经;
如果过滤器指定了一个scheme、主机名和路经,只有具有相同scheme、主机名和路经的URIs才可以和这个过滤器相匹配。
当然,一个过滤器中的路径规格可以包含通配符,这样只需要部分匹配即可。
比较规则如下:
(1) 一个既不包含URI也不包含数据类型的意图对象,仅在过滤器也同样没有指定任何URI和数据类型的情况下才能通过测试。
(2)一个包含URI但没有数据类型的意图对象,仅在它的URI和一个同样没有指定数据类型的,过滤器里的URI匹配时才能通过测试。这通常发生在类似于mailto:和tel:这样的URIs上:它们并不引用实际数据。
(3)一个包含数据类型但不包含URI的意图对象,仅在这个过滤器列举了同样的数据类型,而且也没有指定一个URI的情况下才能通过测试。
(4)一个同时包含URI和数据类型(或者可从URI推断出数据类型)的意图对象可以通过测试,如果它的类型和过滤器中列举的类型相匹配的话。如果它的URI和这个过滤器中的一个URI相匹配或者它有一个内容
content:或者文件file: URI,而且这个过滤器没有指定一个URI,那么它也能通过测试。换句话说,一个组件被假定为支持 ”content: 数据“和“file: 数据”,如果它的过滤器仅列举了一个数据类型。
提示:在同一个应用内,能使用显示意图,就尽量使用显示意图,增加程序的效率,理论上隐式意图匹配规则是需要花时间寻找的。
该部分意图过滤器参考自简述 IntentFilter(意图过滤器),在此表示感谢。
abstract 和 interface
- 抽象类可以有构造方法,接口不能有构造方法;
- 抽象类中可以有普通成员变量,接口中没有普通成员变量;
- 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须是抽象的,不能有非抽象的普通方法;
- 抽象类中抽象方法的访问类型可以是public,protected和默认类型虽然(eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型,并且默认即为public abstract类型;
- 抽象类中可以包含静态方法,接口中不能包含静态方法;
- 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型;
- 一个类可以实现多个接口,但只能继承一个抽象类。
给listView设置分割线:并设置偏移
可以在drawable里创建list_divider_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="10dp"
android:insetRight="10dp">
<shape android:shape="rectangle">
<solid android:color="#ff0025"/>
</shape>
</inset>
设置listView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/lv_fruit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@drawable/list_divider_bg"
android:dividerHeight="1dp"/><!--必须设置dividerHeight-->
</LinearLayout>
注意:如果android:divider配置的是一个颜色,或者setDivider()配置的是一个ColorDrawable对象,一定要通过android:dividerHeight或setDividerHeight()来设置分割线的高度。不能试图只设置分割线颜色,然后让ListView使用默认分割线高度。
活动启动的最佳方式--actionStart()
为了避免开发过程中会产生沟通上的问题,比如参数是什么之类的,很影响我们开发的效率。
// 要被调用的活动里,定义类方法
public static void actionStart(Context context, String param) {
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra("key", param);
context.startActivity(intent);
}
// 在上个活动里直接调用
SecondActivity.actionStart(MainActivity.this, "string data");

fragment的几个回调
1. onAttach()
当碎片和活动建立关联的时候调用。
2. onCreateView()
为碎片创建视图(加载布局)时调用。
3. onActivityCreated()
确保与碎片相关联的活动一定已经创建完毕的时候调用。
4. onDestroyView()
当与碎片关联的视图被移除的时候调用。
5. onDetach()
当碎片和活动解除关联的时候调用。

数组中的数据是无法直接传递给 ListView 的,我们还需要借助适配器来完成。
活动的启动模式(launchMode):standard(默认模式,每次都会创建新的实例)、singleTop(当在栈顶时,不会创建新的实例;但没在栈顶,仍会创建新实例)、singleTask(每次启动该活动时系统首先 会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这 个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例)、singleInstance(在这种模式下会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都共用的同一个返回栈,也就解决了共享活动实例的问题。)。
Activity状态:1、运行;2、暂停;3、停止;4、销毁。
活动的生存期:
- onCreate()
这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动 第一次被创建的时候调用。你应该在这个方法中完成活动的初始化操作,比如说加载布 局、绑定事件等。- onStart()
这个方法在活动由不可见变为可见的时候调用。- onResume()
这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的
栈顶,并且处于运行状态。- onPause()
这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方 法中将一些消耗 CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度 一定要快,不然会影响到新的栈顶活动的使用。- onStop()
这个方法在活动完全不可见的时候调用。它和 onPause()方法的主要区别在于,如 果启动的新活动是一个对话框式的活动,那么 onPause()方法会得到执行,而 onStop() 方法并不会执行。- onDestroy()
这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。- onRestart()
这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。
以上七个方法中除了 onRestart()方法,其他都是两两相对的,从而又可以将活动分为三种生存期。
a. 完整生存期
活动在 onCreate()方法和 onDestroy()方法之间所经历的,就是完整生存期。一般情 况下,一个活动会在 onCreate()方法中完成各种初始化操作,而在 onDestroy()方法中完 成释放内存的操作。
b. 可见生存期
活动在 onStart()方法和 onStop()方法之间所经历的,就是可见生存期。在可见生存 期内,活动对于用户总是可见的,即便有可能无法和用户进行交互。我们可以通过这两 个方法,合理地管理那些对用户可见的资源。比如在 onStart()方法中对资源进行加载, 而在 onStop()方法中对资源进行释放,从而保证处于停止状态的活动不会占用过多内存。
c. 前台生存期
活动在 onResume()方法和 onPause()方法之间所经历的,就是前台生存期。在前台 生存期内,活动总是处于运行状态的,此时的活动是可以和用户进行相互的,我们平时 看到和接触最多的也这个状态下的活动。

- Log.v ()用于打印那些最为繁琐的、意义最小的日志信息。对应级别verbose,是Android日志里面级别最低;
- log.d ()用于打印一些调试信息,有助于调试程序和分析问题,对应级别debug,比verbose高一级;
- log.i ()用于打印一些比较重要的数据,这些数据是你非常想看到的数据、可帮你分析数据。对应info;
- log.w()用于打印一些警告信息,提示程序在这个地方存在潜在风险,最好去修复出现警告的地方。对应warn;
- log.e()用于打印程序中错误信息,比如程序进入到catch语句当中,当有错误信息打印出来时,一般代表你的程序出现严重问题了,必须尽快修复。对应级别error。
当 android:orientation="vertical" 时, 只有水平方向的设置才起作用,垂直方向的设置不起作用。 即:left,right,center_horizontal 是生效的。 当 android:orientation="horizontal" 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用。 即:top,bottom,center_vertical 是生效的。
一般带
layout_
的都是相对于父视图或兄弟组件来说。
创建shape/selector
切换到
Project
,选Drawable Resource File
,然后将Root element
改成相应的类型。
<solid android:color = "xxx"> 这个是设置背景颜色的
<stroke android:width = "xdp" android:color="xxx"> 这个是设置边框的粗细,以及边框颜色的
<padding android:bottom="xdp"...> 这个是设置边距的
<corners android:topLeftRadius="10px"...> 这个是设置圆角的
<gradient> 这个是设置渐变色的,可选属性有: startColor:起始颜色 endColor:结束颜色 centerColor:中间颜色 angle:方向角度,等于0时,从左到右,然后逆时针方向转,当angle = 90度时从下往上 type:设置渐变的类型
TextView设置阴影在设置的时候必须要设置
shadowRadius
如:
android:shadowColor="#ff0025"
android:shadowRadius="3"
android:shadowDx="10"
android:shadowDy="10"
效果图
TextView支持的HTML标签:
<font>:设置颜色和字体。
<big>:设置字体大号
<small>:设置字体小号
<i><b>:斜体粗体
<a>:连接网址
<img>:图片



注:该部分图片来自于网络
网友评论