一、手动创建Activity
1.找到项目包的位置:app/src/main/java/com.xxxx.xxx目录
右键包->New->Activity->Empty Activity
取消Generate Layout File和Launcher Activity,第一个是创建一个对应的布局,第二个是将这个新创建的Activity默认为当前项目的主活动。
创建一个新的Activity都会默认重新父类的OnCreate()方法
package com.movieproject.yj.mproject;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
二、创建布局
右击app/src/main/res目录->New->Directory
创建一个layout目录
创建一个新的布局:New->Layout resource file
Design是当前可视化布局编辑器,可以浏览布局以及拖放编辑布局。
Text是通过XML文件的方式来编辑布局
加入一个button元素,match_parent表示让当前元素和父元素一样宽,wrap_content表示当前元素的高度只要能刚好包含里面的内容就好
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button_01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button 1"
/>
</LinearLayout>
在android上基本不用拖动的方式来布局的,这对你以后没什么好处。还是老老实实学习xml布局吧,以后你就知道为什么拖不可取了。
然后我们在MainActivity中SetContentView(),设置成R.layout.first_layout,调用这个方法来给当前的活动加载一个布局
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
}
}
三、AndroidManifest文件中注册活动
1.所有的活动都要在这个xml中进行注册才能生效
在Activity标签中我们使用android:name来指定具体注册哪个Activity,这里的.MainActivity就是我们要注册的,其实这是com.example.activitytest.MainActivity的缩写,因为前面包名已经通过package指定的,所以可以省略掉
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hahaha.exsample.com.activityapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" />
</application>
</manifest>
2.我们现在需要将这个Activity设置成主活动
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hahaha.exsample.com.activityapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:label="This is FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我们可以通过运行键来看我们的运行结果
如果没有虚拟设备的话,需要按照提示安装一个,跟装AndroidSDK差不多
四、使用Toast
Toast是Android系统提供的一个非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1 = (Button) findViewById(R.id.button_01);
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"You clicked Button 1",Toast.LENGTH_SHORT).show();
}
});
}
}
五、使用Menu
1.首先在res目录下新建一个menu文件夹,再在menu文件夹下新建一个叫做main的菜单文件
右键->New->Menu resource file
加上一些item标签,如下:
<?xml version="1.0" encoding="utf-8"?>
<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>
2.接着回到MainActivity中去重写OnCreateOptionsMenu()方法,快捷键Ctrl+O
public class MainActivity extends AppCompatActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
getMenuInflater()方法能够得到MenuInflater对象,调用inflate()方法就可以给当前活动创建菜单了。这个方法两个参数:第一个用于指定我们通过哪一个资源文件夹创建菜单,第二个参数用于指定我们的菜单项将添加到哪一个Menu对象当中。返回值true表示允许创建的菜单显示出来,反之则不显示。
3.重写OnOptionsIntemSelected()方法
public class MainActivity extends AppCompatActivity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(this,"You click add",Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(MainActivity.this,"You click remove",Toast.LENGTH_SHORT).show();
break;
default:
}
return true;
}
六、销毁一个活动
1.一个简单的做法,按Back键就可以销毁当前的活动了
2.通过代码调用finish()方法也是一样的
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
finish();
}
});
七、显式Intent
创建一个新的活动
这样默认的就会创建出一个新的活动以及布局,同时代码中会使用这个布局,然后我们的AndroidManifest.xml也会自动生成这个活动的配置
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="This is FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity"></activity>
</application>
接下来进入主题:Intent
Intent是安卓程序中各组件之间进行交互的一种重要方式,不仅可以致命当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务以及发送广播等场景。
Intent大致可分为两种:显式Intent和隐式Intent
Intent哟u多个构造函数,new Intent(Context context,Class cls),第一个参数Context表示提供一个启动活动的上下文,第二参数Class则是指定想要启动的目标活动,然后通过Activity类中的startActivity()方法进行活动的跳转
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
});
七、隐式Intent
Intent的用法更多的事隐式用法
1.通过action和category打开一个活动
打开AndroidManifest.xml,设置secondActivity的属性
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="hahaha.exsample.com.activityapplication.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Intent intent = new Intent("hahaha.exsample.com.activityapplication.ACTION_START");
//category 默认就是DEFAULT,所以不需要再次指定了
startActivity(intent);
}
});
2.指定多个category
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="hahaha.exsample.com.activityapplication.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="hahaha.exsample.com.activityapplication.MY_CATEGORY" />
</intent-filter>
</activity>
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Intent intent = new Intent("hahaha.exsample.com.activityapplication.ACTION_START");
intent.addCategory("hahaha.exsample.com.activityapplication.MY_CATEGORY");
startActivity(intent);
}
});
3.打开网址
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.jd.com/"));
startActivity(intent);
}
});
我们还可以在<intent-filter>标签中再设置一个<data>标签,用于更精确地指定当前活动能够相应什么类型的数据,<data>标签可以配置一下内容:
android:scheme用于指定数据的协议部分,比如http
android:host用于指定数据的主机名部分,比如www.baidu.com
android:port用于指定数据的端口部分,一般紧随在主机名之后
android:path用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容
android:mimeType用于指定可以处理的数据类型,允许使用通配符的方式进行指定
只有<data>标签中指定的内容和Intent中携带的Data完全一致时,当前活动才能够响应该Intent
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
</intent-filter>
</activity>
直接通过之前方法打开这个活动
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Intent intent = new Intent("android.intent.action.VIEW");
startActivity(intent);
}
});
除了http协议外,我们还可以指定很多其他协议,比如geo表示显示地理位置、tel表示拨打电话。