Android 第一行代码学习笔记第一章 概述1.1安卓系统架构1.2Android四大组件1.3项目结构1.4app目录结构1.5 项目运行原
Android系统是基于linux内核的,大致可以分为四层架构:Linux内核层、系统运行库层、应用框架层、应用层。
1.Linux内核层:为Android设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、等
2.系统运行库层:通过一些C/C++库来为Android系统提供了主要的特性支持。同时这一层还有Android运行时库,主要提供了一些核心库,能够允许开发者使用Java语言编写Android应用。同时还包含了Dalvik虚拟机(5.0后改为ART运行环境,专门为移动设备定制的)
3.应用框架层:主要提供了构建应用程序时可能用到的各种api
4.应用层:所有安装再手机上的应用程序都是属于这一层
分别是活动、服务、广播接收器、内容提供器
1、活动:是所有Android应用程序的门面,应用中能看到的东西都是放在活动中的
2、服务:在后台运行,即使用户退出应用,服务仍然是可以继续运行
3、广播接收器:允许应用接收和发送广播消息
4、内容提供器实现:应用程序之间共享数据
//以上两行表示FirstActivity是该项目的主活动
FirstActivity.java
public class FirstActivity extends AppCompatActivity {
//活动创建时必定要执行的方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);//引入布局
}
}
first_layout.xml
1.6 res目录详解
1.res目录
AndroidManifest.xml对应修改部分
2、创建带menu的活动
在res中创建menu文件夹,再创建main.xml
item标签创建具体的菜单项,再指定标识符与名称
FirstActivity.java修改部分
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.main,menu);//getMenuInflater能创建MenuInflater对象和调用inflate方法为当前活动创建菜单,参数一表示通过哪一个资源文件创建菜单、参数二指定菜单项所要传入的Menu对象
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
//设置菜单响应事件
switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(this,"you clicked add",Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this,"you clicked remove", Toast.LENGTH_LONG).show();
break;
default:
}
return true;
}
tips:使用ctrl+o可以显示可覆盖的方法列表
2.2 使用Intent在活动之间跳转 2.2.1使用显示和隐式Intent1.使用显示Intent
首先创建第二个活动,命名为SecondActivity
然后更改FirstActivity的覆盖方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
}
});
}
2.使用隐式Intent
修改AndroidManifest.xml
每个Intent只能指定一个action,可以指定多个cateGory
修改FirstActivity.java文件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");//如果没有增加自定义的category,则不需要添加此行代码
startActivity(intent);
}
});
}
2.2.2隐式Intent的更多用法
eg.调用系统内置动作
FirstActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("Http://www.baidu.com"));
startActivity(intent);
});
}
此处还可以自定义Intent响应事件,使得程序显示多个相应活动
2.2.3互动间传递数据1.向下一个活动传递数据
修改FirstActivity.java如下
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data = "Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);
}
});
}
修改SecondActivity.java来获取数据
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d(TAG, data);
}
2、返回数据给上一个活动
修改FirstActivity.java如下
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivityForResult(intent,1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnData = data.getStringExtra("data_return");
Log.d(TAG, returnData);
}
break;
default:
}
}
修改SecondActivity如下
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
Button button2 = (Button) findViewById(R.id.button_2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("data_return","Hello FirstActivity");
setResult(RESULT_OK,intent);
finish();//用于销毁当前活动
}
});
}
@Override
//修改此方法使得与按下Back回到活动一保持一致
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("data_return","Hello FirstActivity");
setResult(RESULT_OK,intent);
finish();
}
--结束END--
本文标题: 第一行代码—Android第二版学习笔记
本文链接: https://lsjlt.com/news/29428.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0