一、新建活动以及如何设置主活动
新建Activity:
勾选Generate Layout File将会自动生成一个布局,勾选Launcher Activity表示会自动将该活动设置为当前主项目。
如何将活动设置为该项目的主活动:
<activity
android:name=".FirstActivity" //通过name注册FirstActivity活动
android:label="主页"> //设置标题,给主活动指定的label不仅会成为标题栏内的内容,还会成为启动器(Launcher)中应用程序显示的名称
<intent-filter>
<action android:name="android.intent.action.MAIN" /> //设置为主活动
<category android:name="android.intent.category.LAUNCHER" /> //设置为主活动
</intent-filter>
</activity>
即:在< activity >标签的内部加入< intent-filter >标签,并在这个标签中加入
< action android:name=“android.intent.action.MAIN” />
< category android:name=“android.intent.category.LAUNCHER” />
这两句即可。
二、在活动中使用Toast
Toast是Android系统提供的一种非常好的提醒方式,这些提醒信息会在一段时间后自动消失,效果图如下:
首先需要定义一个弹出Toast的触发点,比如在界面上点击一个按钮,然后弹出Toast。在onCreate中添加以下代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.textview_layout);
button4 = (Button) findViewById(R.id.button_4);
button4.setOnClickListener(new View.OnClickListener() { //设置监听器setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v) {
Toast.makeText(SecondActivity.this, "you clicked the button", Toast.LENGTH_SHORT).show();
}
});
}
findViewById()方法是获取到在布局文件中定义的元素,这里我们传入R.id.button_4,来得到按钮实例。findViewById()返回一个view对象,需要向下进行类型转换。Toastt通过静态方法makeText()创建一个Toast对象,然后调用show()将Toast显示出来。Toast需要三个参数,第三个参数是Toast显示时长,有两个内置常量可以选择Toast.LENGTH_SHORT(2秒)和Toast.LENGTH_LONG(3.5秒)。
三、在活动中使用Menu
在res目录下新建一个menu文件夹res->New->Directory,然后在这个文件夹下再新建一个菜单文件file
(menu->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>
//<item>标签用来创建具体的某一个菜单项
效果图:
接着回到一个活动页面中来重写onCreateOptionsMenu()方法,重写方法可以使用Ctrl+O快捷键(win系统)。
public boolean onCreateOptionsMenu(Menu menu) //目录
{
getMenuInflater().inflate(R.menu.main,menu);// main为创建的menu文件
return true;
}
通过getMenuInflater()方法能够得到MenuInflater对象,再调用它的inflate()方法就可以给当前活动创建菜单了。inflate()方法接收两个参数,第一个参数用于指定我们通过哪一个资源文件来创建菜单。第二个参数用于指定我们的菜单项将添加到哪一个Menu对象中,这里直接使用onCreateOptionsMenu()方法中传入的menu参数。然后返回true,表示允许创建的菜单显示出来。
定义菜单响应事件,在该活动中重写onOptionsItemSelected()方法:
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case R.id.add_item:
Intent intent=new Intent(FirstActivity.this,radioButtonActivity.class); <!--使用intent显式-->
startActivity(intent);
break;
case R.id.remove_item:
Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT).show(); <!--使用Toast-->
break;
}
return true;
}
!在XML文件中注释为< !-- – >
在onOptionsItemSelected()方法中,通过调用item.getItenIfd()来判断点击,然后给每个菜单项加入知己的逻辑处理。
四、销毁活动
在活动中调用finish()方法:
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
点击当前按钮和点击back效果一样。
五、使用Intent
Intent大致可以分为显式Itent和隐式Itent。
显式Itent
使用方法:因为意图明显所以称为显式
隐式Iten
相对于显式Itent,隐式Itent则含蓄很多,他并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象action和category等信息,然后交给系统去分析这个Itent,并帮我们找出合适的活动去启动。合适的活动就是可以响应我们这个隐式Itent的活动。
通过在< activity>标签下配置< intent-filter>的内容,可以指定当前活动能够响应的action和category,打开AndroidManifest.xml,添加以下代码:
<activity android:name=".SecondActivity"
android:label="TextView页面">
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
在< action>标签中指出了当前活动可以响应com.example.activitytest.ACTION_START这个action,而< category>标签则包含一些附加信息,更精确地指出了当前活动能够响应的Itent中还可能带有的category。只有< action>和< category>中的内容同时能够匹配上Itent中指定的action和category时,这个活动才能响应该Itent。
修改点击事件:
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);
}
});
因为android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法时会自动将这个category添加到Itent中。所以这里不需要< action>和< category>同时匹配上。
使用隐式Itent不仅可以启动自己程序内的活动,还可以启动其他程序的活动,这使得Android多个应用程序之间的功能共享成了可能。比如需要打开一个网页,我们可以调用系统的浏览器来打开,而不需要写一个浏览器。
修改点击事件:
//隐式Itent访问浏览器
button8.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"));
//Intent intent=new Intent(Intent.ACTION_DIAL); //打电话
//intent.setData(Uri.parse("tel:10086"));//
startActivity(intent);
}
});
Intent.ACTION_VIEW是内置的动作:显示指定数据
Uri.parse( )方法是将一个网址字符串解析成一个Uri对象。
setData接收一个Uri对象,主要用于指定当前Intent正在操作的数据,而这些数据通常都是以字符串的形式传入到Uri.parse( )方法中解析产生的。
Android中的Action和Category常量表
还可以在< intent-filter>标签中再配置一个< data>标签,用于更精确地指定当前活动能够响应什么类型的数据。
< data>标签中主要可以配置以下内容:
android:schme。用于指定数据的协议部分,如http
android:host。用于指定数据的主机名部分,如上例www.baidu.com部分
android:port。用于指定数据的端口部分,一般紧随在主机名之后
android:path。用于指定数据主机名和端口之后的部分,如一段网址中跟在域名之后的内容
android:mimeType。用于指定可以处理的数据类型,允许使用通配符的方式进行指定。
只有< data>标签中指定内容和Intent中携带的Data一致时,当前活动才能够响应该Intent。