1.Meun:
- res->New->Directory新建文件夹
- New->Menu resource file新建菜单文件
- 在菜单文件中添加:
-
<menu xmlns:android="http://schemas.android.com/apk/res/android"> //创建某个菜单项 <item android:id="@+id/add_item" //指定标识符 android:title="Add"/> //指定菜单名 <item android:id="@+id/remove_item" android:title="Remove"/> </menu><menu xmlns:android="http://schemas.android.com/apk/res/android"> //创建某个菜单项 <item android:id="@+id/add_item" //指定标识符 android:title="Add"/> //指定菜单名 <item android:id="@+id/remove_item" android:title="Remove"/> </menu>
-
在Activity中重写onCreateOptionsMenu(Menu menu
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
//得到一个MenuInflater对象,调用inflate()方法,第一个参数为用于指定我们通过哪一个资源文件创建菜单,第二个菜单项加入到哪一个Menu对象中
return true;
//允许菜单显示
}
//菜单添加响应
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_SHORT).show();
break;
default:
}
return true;
}
2. Intent
是Aandroid程序中各组件之间进行交互的一种方式。
显式Intent与隐式Intent的区别
显式Intent:通过组件名指定启动的目标组件,比如startActivity(new Intent(A.this,B.class)); 每次启动的组件只有一个
隐式Intent:不指定组件名,而指定Intent的Action,Data,或Category,当我们启动组件时, 会去匹配AndroidManifest.xml相关组件的Intent-filter,逐一匹配出满足属性的组件,当不止一个满足时, 会弹出一个让我们选择启动哪个的对话框
显式Intent:
public void onClick(View view) {
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
//构造一个intent(上下文,目标活动),在上下文这个活动的基础上打开目标活动
startActivity(intent);
//执行这个INTENT
}
隐式Intent:
.xml文件中
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
//当前活动可以响应com.example.activitytest.ACTION_START这个ACTION
<category android:name="android.intent.category.DEFAULT" />
//附加信息,能够响应Intent中还有可能带有的CATEGORY
//只有action、category中的内容能同时匹配Intent中指定的action、category时,才可以享用Intent
</intent-filter>
Activity中:
public void onClick(View view) {
Intent intent=new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);
}
3.Intent中增加category
Activity中:
intent.addCategory("com.example.activitytest.MY_CATEGORY");
.xml文件中
<category android:name="com.example.activitytest.MY_CATEGORY" />
4.intent打开网页:
Intent intent=new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
<data必须和Intent中携带的的Data完全一致,才响应应该的intent.<activity
android:name=".ThirdActivity">
<intent-filter tools:ignore="AppLinkUrlError">
<action android:name="android.intent.action.VIEW" />
//当前活动响应action是intent.action.VIEW的常量值
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http"/>
//指定了数据的协议必须是HTTP
</intent-filter>
</activity>
intent拨号页面
Intent intent=new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
5.putExtra()传数据
FirstActivity:
String data="Hello SecondActivity";;
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);
SecondActivity:
Intent intent=getIntent();
String data=intent.getStringExtra("extra_data");
Log.d("SecondActivity",data);
6.startActivityForResult()测试
FirstActivity:
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
startActivityForResult(intent,1);
SecondActivity:
Button button2=(Button) findViewById(R.id.button_2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent();
intent.putExtra("data_return","Hello FirstActivity");
setResult(RESULT_OK,intent);
finish();}
});
7.Dialog主题设置:
<activity
android:name=".DialogActivity"
android:theme="@style/Theme.AppCompat.Dialog">
</activity>
8.onSaveInstanceState()暂存数据
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
}
9.活动状态
onCreate:新创建 ---完全被覆盖----->onPause、onStop-------恢复---->onRestart、onStart、onResume
onStart:开始 ---没有完全被覆盖----->onPause-------恢复---->onResume
onResume:交互 -----销毁---->onPause、onStop、onDestory
10.Activity四种launchMode:
在AndroidManifest.xml配置<activity>的Android:launchMode属性
- standard每次启动都会创建该活动的一个新的实例。
- singleTop在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。如果已经存在,但不是栈顶,则创建
- singleTask次启动活动时会系统首先检查返回栈中是否已经存在该活动的实例,如果发现已经存在则直接使用该实例,并把该实例之上的所有活动统统出栈;如果没有发现就会创建一个新的实例。
- singleInstance会启用一个新的返回栈来管理这个活动。
11. 获取当前实例的类名,并通过LOg打印
Log.d("BaseActivity",getClass().getSimpleName());
12.杀掉当前进程
android.os.Process.killProcess(android.os.Process.myPid());
13.Intent规范写法:
public static void actionStart(Context context,String data1,String data2){
Intent intent=new Intent(context,SecondActivity.class);
intent.putExtra("parm1",data1);
intent.putExtra("parm2",data2);
context.startActivity(intent);
}
通过:SecondActivity.actionStart(FirstActivity.this,"data1","data2");即可实现