第一行代码笔记.docx
- 文档编号:4466379
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:25
- 大小:150.87KB
第一行代码笔记.docx
《第一行代码笔记.docx》由会员分享,可在线阅读,更多相关《第一行代码笔记.docx(25页珍藏版)》请在冰豆网上搜索。
第一行代码笔记
Android系统四大组件分别是活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)和内容提供器(ContentProvider)。
所有的活动都必须要继承Activity才能拥有活动的特性
onCreate()方法是一个活动被创建时必定要执行的方法
drawable开头的文件夹都是用来放图片的,所有以values开头的文件夹都是用来放字符串的,layout文件夹是用来放布局文件的,menu文件夹是用来放菜单文件的
1.在代码中通过R.string.hello_world可以获得该字符串的引用;
2.在XML中通过@string/hello_world可以获得该字符串的引用
setContentView()方法来给当前的活动加载一个布局
android=" package="com.example.activitytest" android: versionCode="1" android: versionName="1.0"> android: minSdkVersion="14" android: targetSdkVersion="19"/> android: allowBackup="true" android: icon="@drawable/ic_launcher" android: label="@string/app_name" android: theme="@style/AppTheme"> android: name=".FirstActivity" /*使用android: name来指定具体注册哪一个活动 com.example.activitytest.FirstActivity的缩写*/ android: label="ThisisFirstActivity"> name="android.intent.action.MAIN"/> name="android.intent.category.LAUNCHER"/> 使用了android: label指定活动中标题栏的内容 label不仅会成为标题栏中的内容,还会成为启动器(Launcher)中应用程序显示的名称 protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.first_layout); Buttonbutton1=(Button)findViewById(R.id.button_1); button1.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Toast.makeText(FirstActivity.this,"YouclickedButton1", Toast.LENGTH_SHORT).show(); } }); } requestWindowFeature(Window.FEATURE_NO_TITLE)的意思是不在活动中显示标题栏 通过findViewById()方法获取到在布局文件中定义的元素 findViewById()方法返回的是一个View对象,向下转型将它转成Button对象 通过调用setOnClickListener()方法为按钮注册一个监听器,点击按钮时就会执行监听器中的onClick()方法 Toast通过静态方法makeText()创建出一个Toast对象,然后调用show()将Toast显示出来就可以了 makeText()方法需要传入三个参数。 第一个参数是Context,也就是Toast要求的上下文,由于活动本身就是一个Context对象,因此这里直接传入FirstActivity.this即可。 第二个参数是Toast显示的文本内容,第三个参数是Toast显示的时长,有两个内置常量可以选择Toast.LENGTH_SHORT和Toast.LENGTH_LONG android="> android: id="@+id/add_item" android: title="Add"/> android: id="@+id/remove_item" android: title="Remove"/> 通过android: id给这个菜单项指定一个唯一标识符 通过android: title给这个菜单项指定一个名称 然后打开FirstActivity,重写onCreateOptionsMenu()方法 publicbooleanonCreateOptionsMenu(Menumenu){ getMenuInflater().inflate(R.menu.main,menu); returntrue; } 通过getMenuInflater()方法能够得到MenuInflater对象 调用它的inflate()方法给当前活动创建菜单 inflate()方法接收两个参数,第一个参数用于指定我们通过哪一个资源文件来创建菜单,这里当然传入R.menu.main,第二个参数用于指定我们的菜单项将添加到哪一个Menu对象当中,这里直接使用onCreateOptionsMenu()方法中传入的menu参数。 然后给这个方法返回true,表示允许创建的菜单显示出来,如果返回了false,创建的菜单将无法显示。 定义菜单响应事件。 在FirstActivity中重写onOptionsItemSelected()方法: publicbooleanonOptionsItemSelected(MenuItemitem){ switch(item.getItemId()){ caseR.id.add_item: Toast.makeText(this,"YouclickedAdd",Toast.LENGTH_SHORT).show(); break; caseR.id.remove_item: Toast.makeText(this,"YouclickedRemove",Toast.LENGTH_SHORT).show(); break; default: } returntrue; } onOptionsItemSelected()方法中,通过调用item.getItemId()来判断我们点击的是哪一个菜单项 通过代码来销毁活动 button1.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ finish(); } }); 调用Activity类提供的finish()方法销毁当前活动 Intent不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据 button1.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Intentintent=newIntent(FirstActivity.this,SecondActivity.class); startActivity(intent); } }); 首先构建出了一个Intent,传入FirstActivity.this作为上下文,传入SecondActivity.class作为目标活动,即在FirstActivity这个活动的基础上打开SecondActivity这个活动,startActivity()用于启动活动 隐式Intent并不明确指出我们想要启动哪一个活动,而是指定action和category等信息,由系统去分析这个Intent,并帮我们找出合适的活动去启动 在 只有 修改FirstActivity中按钮的点击事件: button1.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Intentintent=newIntent("com.example.activitytest.ACTION_START"); startActivity(intent); } }); 使用了Intent的另一个构造函数,直接将action的字符串传了进去,表明我们想要启动能够响应com.example.activitytest.ACTION_START这个action的活动 android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中 每个Intent中只能指定一个action,但却能指定多个category 修改FirstActivity中按钮的点击事件,代码如下所示: button1.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Intentintent=newIntent("com.example.activitytest.ACTION_START"); intent.addCategory("com.example.activitytest.MY_CATEGORY"); startActivity(intent); } }); 调用Intent中的addCategory()方法来添加一个category 在Intent中新增了一个category,SecondActivity的 在 name=".SecondActivity"> name="com.example.activitytest.ACTION_START"/> name="android.intent.category.DEFAULT"/> name="com.example.activitytest.MY_CATEGORY"/> 隐式Intent不仅可以启动自己程序内的活动,还可以启动其他程序的活动 修改FirstActivity中按钮点击事件的代码,如下所示: button1.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Intentintent=newIntent(Intent.ACTION_VIEW); intent.setData(Uri.parse("")); startActivity(intent); } }); 指定了Intent的action是Intent.ACTION_VIEW,这是一个Android系统内置的动作,其常量值为android.intent.action.VIEW。 然后通过Uri.parse()方法,将一个网址字符串解析成一个Uri对象,再调用Intent的setData()方法将这个Uri对象传递进去 setData()接收一个Uri对象,主要用于指定当前Intent正在操作的数据,而这些数据通常都是以字符串的形式传入到Uri.parse()方法中解析产生的 在 标签中主要可以配置以下内容。 1.android: scheme 用于指定数据的协议部分,如上例中的http部分。 2.android: host 用于指定数据的主机名部分,如上例中的部分。 3.android: port 用于指定数据的端口部分,一般紧随在主机名之后。 4.android: path 用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。 5.android: mimeType 用于指定可以处理的数据类型,允许使用通配符的方式进行指定。 putExtra()方法的重载,可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后,只需要把这些数据再从Intent中取出就可以了 字符串传递到SecondActivity中: button1.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Stringdata="HelloSecondActivity"; Intentintent=newIntent(FirstActivity.this,SecondActivity.class); intent.putExtra("extra_data",data); startActivity(intent); } }); 这里putExtra()方法接收两个参数,第一个参数是键,用于后面从Intent中取值,第二个参数才是真正要传递的数据 在SecondActivity中将传递的数据取出,并打印出来: publicclassSecondActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.second_layout); Intentintent=getIntent(); Stringdata=intent.getStringExtra("extra_data"); Log.d("SecondActivity",data); } } 通过getIntent()方法获取到用于启动SecondActivity的Intentt,然后调用getStringExtra()方法,传入相应的键值,就可以得到传递的数据 Activity中有一个startActivityForResult()方法也是用于启动活动的,但这个方法期望在活动销毁的时候能够返回一个结果给上一个活动 button1.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Intentintent=newIntent(FirstActivity.this,SecondActivity.class); startActivityForResult(intent,1); } }); 使用startActivityForResult()方法来启动SecondActivity startActivityForResult()方法接收两个参数,第一个参数还是Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源 publicclassSecondActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.second_layout); Buttonbutton2=(Button)findViewById(R.id.button_2); button2.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Intentintent=newIntent(); intent.putExtra("data_return","HelloFirstActivity"); setResult(RESULT_OK,intent); finish(); } }); } } setResult()方法接收两个参数,第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OK或RESULT_CANCELED这两个值,第二个参数则是把带有数据的Intent传递回去,然后调用了finish()方法来销毁当前活动。 由于我们是使用startActivityForResult()方法来启动SecondActivity的,在SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,因此我们需要在FirstActivity中重写这个方法来得到返回的数据,如下所示: @Override protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){ switch(requestCode){ case1: if(resultCode==RESULT_OK){ StringreturnedData=data.getStringExtra("data_return"); Log.d("FirstActivity",returnedData); } break; default: } } onActivityResult()方法带有三个参数,第一个参数requestCode,即我们在启动活动时传入的请求码。 第二个参数resultCode,即我们在返回数据时传入的处理结果。 第三个参数data,即携带着返回数据的Intent 重写onBackPressed()方法,通过按下Back键回到FirstActivity @Override publicvoidonBackPressed(){ Intentintent=newIntent(); intent.putExtra("data_return","HelloFirstActivity"); setResult(RESULT_OK,intent); finish(); } 用户按下Back键,就会去执行onBackPressed()方法中的代码 启动模式一共有standard、singleTop、singleTask和singleInstance四种,可以在AndroidManifest.xml中通过给 launchMode属性来选择启动模式 standard是活动默认的启动模式 singleTop模式可以防止重复创建栈顶活动 singleTask模式只存在一个实例 singleInstance模式实现其他程序和我们的程序可以共享这个活动的实例,共用同一个返回栈 UI 常见控件 TextView Button EditText ImageView ProgressBar AlertDialog ProgressDialog 基本布局 LinearLayout RelativeLayout FrameLayout TableLayout android: gravity是用于指定文字在控件中的对齐方式,而android: layout_gravity是用于指定控件在布局中的对齐方式 android: layout_weight属性使用比例的方式来指定控件的大小 在TableLayout中每加入一个TableRow就表示在表格中添加了一行 自定义控件 android=" android: layout_width="match_parent" android: layout_height="match_parent"> 通过include语句将布局引入 publicclassTitleLayoutextendsLinearLayout{ publicTitleLayout(Contextcontext,AttributeSetattrs){ super(context,attrs); LayoutInflater
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一行 代码 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)