第一行代码Android学习笔记Word文档格式.docx
- 文档编号:18981327
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:42
- 大小:792.56KB
第一行代码Android学习笔记Word文档格式.docx
《第一行代码Android学习笔记Word文档格式.docx》由会员分享,可在线阅读,更多相关《第一行代码Android学习笔记Word文档格式.docx(42页珍藏版)》请在冰豆网上搜索。
5、ProgressBar11
6、AlertDialog11
7、ProgressDialog12
二、基本布局12
1、LinearLayout12
2、RelativeLayout12
3、FrameLayout12
4、TableLayout12
5、GridLayout13
三、自定义控件13
1、添加自定义标题布局(无操作的)13
2、创建自定义控件13
四、ListView14
1、最简单的Adapter14
2、定制ListView界面15
3、提升ListView效率16
4、ListView点击事件17
五、单位和尺寸17
六、最佳实践——聊天界面18
第四章Fragment18
第五章BroadCastReceiver18
一、广播机制18
二、接收系统广播18
1、动态注册19
2、静态注册20
3、广播接收器使用注意事项20
三、发送自定义广播20
1、标准广播20
2、有序广播21
四、发送和接收本地广播21
五、强制下线22
注意事项:
22
第6章数据存储23
一、文件存储23
1、存储5部曲:
23
2、读取5部曲:
24
二、SharedPreferences存储25
1、存储4部曲25
2、读取2部曲26
三、SQLite数据库26
1、创建数据库26
2、升级数据库27
3、添加数据28
4、更新数据28
5、删除数据28
6、查询数据28
7、直接使用SQL操作数据库28
四、数据库最佳实践29
1、使用事务29
2、升级数据库最佳写法29
第7章ContentProvider31
一、简介31
二、访问已有的CP31
1、ContentResolver用法31
2、读取系统联系人32
三、创建自己的ContentProvider33
1、创建CP步骤5部曲33
四、跨程序数据共享实践35
附录:
Git使用35
一、创建代码仓库35
二、提交本地代码36
三、忽略文件36
四、查看修改内容37
五、撤销未提交的修改38
六、查看提交记录38
第一章Android系统
1.1安卓系统架构
LinuxKernel:
各种底层驱动
Libraries:
RuntimeLibraries,DalvikVM,各种库支持,数据库,3D绘图,浏览器内核
ApplicationFramework:
API,各种manager
Applications
1.2Android项目中的资源
src:
各种java程序在此,包括主程序
gen:
最重要的是R.java,所有res资源都在这里编号,通过R.xx.xx或@xx查询
res:
各种资源都在这里,包括drawable,layout,values等
另外还有menifest文件,统筹兼顾全局的,Android四大组件都要在此注册。
第二章Activity
Activity是包含用户界面的组件,用于和用户进行交互。
1、首先,创建没有Activity的application,发现src文件夹是空的。
手动创建一个包com.example.demo1activity,在包中添加一个class,MainActivity.java。
要使用activity,extentsActivity。
此时,重写Activity的onCreate()方法。
2、此时,只有activity,用户是不可见的。
因此,需要在上面添加layout和view。
在reslayout中添加一个AndroidXMLfile,可以在该xml文件中创建布局。
添加诸如TextView/Button等常用控件。
3、此时,需要将创建的layout文件加载到activity中,在第一步创建的MainActivity中onCreate()方法中,使用setContentView(R.layout.myactivity)将布局加载进来。
4、所有四大组件的使用,都需要在AndroidManifest.xml文件中注册。
注册方法为:
在<
application>
中添加<
activity>
标签,将需要注册的activity使用android:
name="
.MainActivity"
注册。
如果是主activity,即打开application时看到的activity,则需要添加
<
actionandroid:
android.intent.action.MAIN"
/>
categoryandroid:
android.intent.category.LAUNCHER"
总体注册代码为:
activity
android:
label="
MyApp"
>
intent-filter>
/>
/intent-filter>
/activity>
5、销毁activity
finish();
二、采用Intent切换activity
1、显式Intent
首先,按照上面的步骤重新创建一个SecondActivity(记得注册),采用Intent实现跳转
Intentintent=newIntent(MainActivity.this,SecondActivity.class);
startActivity(intent);
2、隐式Intent
隐式Intent并不能实现直接跳转,需要指定两个条件(intent-filter):
action和category。
如果在intent-filter中指定category为default的category,即android.intent.category.DEFAULT,则只需满足action条件即可。
intent-filter在注册activity时添加,注册方法如下:
activityandroid:
.SecondActivity"
>
com.example.demo1activity.SECOND_START"
android.intent.category.DEFAULT"
跳转方法为:
Intentintent=newIntent("
);
intentfilter中只能有一个action,但可以有多个category,满足其中一个category即可。
3、隐式Intent的其他用法
使用隐式intent,不但可以打开自己编写的activity,还可以打开系统编写的activity,比如浏览器,打电话等。
打开浏览器:
Intentintent=newIntent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("
"
));
解释:
Intent.ACTION_VIEW是系统内置的动作,打开浏览器;
setData()将一个Uri对象传入intent,用于指定该intent正在操作的数据,这些数据都是用Uri.parse()将字符串转换为Uri产生的。
在intent-filter中,添加<
data>
标签,用于精确指定该activity能响应的数据类型,包括
scheme用于指定数据的协议部分,比如http。
该方法还可以打电话、显示地理位置等。
三、Intent传递数据
1、向下一个activity传递数据
在头一个activity中,使用putExtra()将数据传入intent
在下一个activity中,使用getIntent()获得传递来的intent,然后使用getStringExtra()获得传递来的数据。
2、返回数据给上一个activity
在上一个activity中,不采用startActivity(),而采用startActivityForResult(intent,1)。
其中,1为requestCode,用于之后判断是不是自己发送出去的intent。
在下一个activity中,建立新的intent,然后将data利用intent.putExtra()放入intent,
setResult(RESULT_OK,intent)放置result,其中RESULT_OK为resultcode,用于在上一个activity中分辨是哪一个activity返回的数据。
最后,finish()。
之后,在上一个activity中,重写onActivityResult()方法。
同样的,如果在第二个activity中,是按返回键返回的,可以在第二个activity中,重写onBackPressed()方法返回数据,方法同上。
四、activity的生命周期
1、活动状态
运行状态:
在栈顶时
暂停状态:
不可操作,但可见
停止状态:
完全不可见
销毁状态:
从栈中被移除
2、activity生存期
完整生存期:
onCreate()onDestory()
可见生存期:
onStart()onStop()
前台生存期:
onResume()onPause()
3、activity被回收数据保存
activity中提供了一个onSaveInstanceState()的方法,该方法会携带一个bundle类型参数,bundle可以保存各种信息。
protectedvoidonSaveInstanceState(BundleoutState){
//TODOAuto-generatedmethodstub
super.onSaveInstanceState(outState);
Stringsavedata="
helloyou"
;
outState.putString("
saved"
savedata);
}
如何恢复数据呢?
在onCreate()方法中,传入的参数为BundlesavedInstanceState,利用这恢复数据。
Stringdata=savedInstanceState.getString(“saved”);
五、activity的启动模式
四种启动模式,可以在<
标签中android:
launchMode定义。
standard:
打开activity,就放入栈顶
singleTop:
打开activity,检查栈顶是否已经存在该activity,存在了就不创建。
不存在才创建。
不过,如果该activity不在栈顶,但也存在,则也会重新创建一个。
singleTask:
检查整个返回栈,如果存在某个activity,则不会重新创建。
singleInstance:
创建一个activity,重新在一个新的返回栈(或Task)中创建,该activity与其他activity不在同一个Task中,其他程序也可以调用这个activity的实例。
六、activity最佳实践
1、知道当前页面是哪一个activity
新建一个BaseActivityextentsActivity,其中在onCreate()中打印该activity的信息
Log.i(“BaseActivity”,getClass().getSimpleName());
//获得类名
然后,所有activity都extentsBaseActivity即可
2、随时随地退出程序
当打开很多activity之后,退出程序需要一直按Back,很麻烦。
首先,新建一个activity管理类,实现所有的activity的添加、删除和finish()。
publicclassActivityCollector{
publicstaticList<
Activity>
activities=newArrayList<
();
publicstaticvoidaddActivity(Activityactivity)
{
activities.add(activity);
publicstaticvoidremoveActivity(Activityactivity)
activities.remove(activity);
publicstaticvoidfinishAll()
for(Activityactivity:
activities)
{
if(!
activity.isFinishing())
{
activity.finish();
}
}
}
然后,修改BaseActivity,在onCreate()中添加this,onDestory()中移除this
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
Log.i("
BaseActivity"
getClass().getSimpleName());
ActivityCollector.addActivity(this);
@Override
protectedvoidonDestroy(){
super.onDestroy();
ActivityCollector.removeActivity(this);
3、给每个activity都添加一个合适的启动方法
比如我需要启动一个SecondActivity,可是不知道该activity需要哪些参数,怎么办?
在SecondActivity中添加一个启动自己的方法:
publicclassSecondActivityextendsActivity
{
…
publicstaticvoidstartActivity(Contextcontex,Stringdata1,Stringdata2)
Intentintent=newIntent(context,SecondActicity.class);
intent.putExtra(“param1”,data1);
intent.putExtra(“param2”,data2);
startActivity(intent);
在SecondActivity中添加了startActivity()方法之后,在任意的activity中启动SecondActivity,都可以调用该方法,而且知道需要传入哪些参数。
比如在MainActivity中启动方法为:
SecondActivity.startActivity(MainActivity.this,“data1”,“data2”);
第三章UI
一、常用控件
1、TextView
2、Button
3、EditText
密码:
password=”true”
4、ImageView
5、ProgressBar
设置其进度
progress=bar.getProgress();
progress+=10;
bar.setProgress(progress);
if(progress==100)
{
bar.setVisibility(View.GONE);
}
6、AlertDialog
AlertDialog.Builderdialog=newAlertDialog.Builder(MainActivity.this);
dialog.setTitle("
确认删除"
dialog.setMessage("
你确认删除么?
dialog.setCancelable(false);
dialog.setPositiveButton("
确认"
newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//TODOAuto-generatedmethodstub
Toast.makeText(MainActivity.this,"
已经删除"
Toast.LENGTH_SHORT).show();
}
});
dialog.setNegativeButton("
取消"
已经取消"
dialog.show();
7、ProgressDialog
和AlertDialog类似,只是内容为一个进度条。
进度加载完成之后,必须使用dismiss()来关闭对话框。
二、基本布局
1、LinearLayout
gravity指定文字在控件中的对齐方式
layout_gravity:
指定控件在布局中的对齐方式
layout_weight:
按比例分配控件大小
2、RelativeLayout
3、FrameLayout
4、TableLayout
TableRow>
/TableRow>
layout_span=”2”将两列合并为一列
在TableRow中无法指定控件的宽度,通过android:
stretchColumns=”1”,指定将第二列拉伸到最大。
5、GridLayout
三、自定义控件
Android中,控件和布局的继承结构如下图:
1、添加自定义标题布局(无操作的)
自定义一个布局title.xml,然后在mainactivity布局中引入
includelayout=”@layout/title”/>
当然,需要将系统自带标题栏屏蔽
requestWindowFeature(Window.FEATURE_NO_TITLE);
2、创建自定义控件
上面方法自定义的标题栏并不能响应操作,采用自定义控件方法来实现操作。
(1)首先,构建一个title.xml布局文件
(2)然后,构建一个自定义标题控件TitleLayout:
利用LayoutInflater动态加载布局文件title.xml。
publicclassTitleLayoutextendsLinearLayout{
publicTitleLayout(Contextcontext,AttributeSetattrs){
super(context,attrs);
LayoutInflater.from(context).inflate(R.layout.title,this);
Buttonedit=(Button)findViewById(R.id.title_edit);
Buttonback=(Button)findViewById(R.id.title_back);
edit.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
Toast.makeText(getContext(),"
Edit"
});
back.setOnClickListener(newOnClickListener(){
//T
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一行 代码 Android 学习 笔记