1.活动是什么。
活动是一种可以包含用户界面的组件,主要用于和用户交互。一个应用程序可以包含零个或多个活动。(四大组件 活动、广播、content provider和服务)
2.活动用法
2.1创建布局
项目中的任何活动都需要重写Activity的onCreate()方法.
例如新建一个FirstActivity.java:
public class FirstActivity extends AppCompatActivity
{
@override
protected void onCreate(Bundle savedInstanceState)
{
supper.onCreate(savedInstanceState);
}
}
2.2创建布局
新建布局XML文件在res/layout目录下名为first_layout.xml.。具体代码如下所示
<?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_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button 1"
/>
<TextView
android:id="@+id/text_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="text 1"
/>
其version指定了版本,encoding指定了编码方式
<?xml version="1.0" encoding="utf-8"?>布局文件根节点为Linearlayout(线性布局), xmln是指定了命名空间
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
线性布局下有Button和TextView元素。并在Button元素中添加了android:id 、android:layout_width、android:layout_height和android:text属性。
其中android:id 是Button元素的唯一标识符。android:layout_width和android:layout_height是设置Button和TextView元素的宽和高。android:text是设置显示的文本。
在XML文件中引用资源的语法是“@id/id_name”,定义一个id的语法是"@+id/id_name".
在FirstActivity中加载first_layout.xml布局,只需要添加如下代码。
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.firstlayout);
Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v)
{
Toast.makeText(MainActivity.this, "You clicked button 1",
Toast.LENGTH_SHORT).show();
}
TextView text1 = (TextView) findViewById(R.id.text_1);
// text1.setText("sb 弄了那么久");
});
}
}
setContentView()方法是给当前的活动加载布局,传入的参数是布局文件的id。项目中添加的任何资源都会在R文件中生成一个相应的资源id。只需要调用
R.layout.first_layout可以得到first_layout.xml布局的id。
2.3在AndroidManifest文件中注册
所有的活动都要在AndroidManifest文件中注册才能生效。
例如:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.missj.activitytest">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="This is FirstActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
其中package是包名。活动的注册声明要放在<application>标签内。在<Activity>标签中用android:name来指定注册哪一个活动。
配置主活动就是在<activity>标签内部加入<intent-filter>标签并且在这个标签里面添加下面两句声明就可以了。
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />除此之外还可以使用android:label指定活动中标题栏的内容,标题栏是显示在活动的最顶部的。
需要注意的是应用程序中没有声明任何一个活动作为主活动,程序也是可以正常安装的,只是无法再启动器中看到或者打开这个程序。这个程序一般是作为
第三方服务供其他应用在内部调用的,例如支付宝快捷支付服务。
2.4在活动中使用Toast
Toast是Android提供的一种提醒方式,可以用它将一些短小的信息通知给用户,会显示一段时间后自动消失,不占用任何屏幕空间。
例如: Toast.makeText(FirstActivity.this , "YOU clicked Button 1", Toast.LENGTH_SHORT).show();
Toast使用方法是通过静态方式makeText()创建一个Toast对象,然后调用show()将Toast内容显示出来。makeText传入三个参数,第一个参数是Context,也就是Toast
要求的上下文。活动本身就是一个Context对象,直接传入FirstActivity.this就可以了,第二个参数是Toast显示的文本内容。第三个参数是Toast显示的时长,可以
选择TOAST.LENGTH_SHORT和TOAST.LENGTH_LONG。
2.5 活动中使用Menu
1.在res目录下创建menu文件夹,新建一个main的菜单文件.在main.xml文件中添加如下代码:
<?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>
创建了两个菜单项,其中<item>标签是用来创建具体的某一个菜单,然后通过android:id指定菜单项唯一的标识符,通过android:title指定菜单名称。
2.在FirstActivity中重写onCreateOptionnsMenu方法。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
通过getMenuInflater()方法可以得到MenuInflater对象,调用inflate()方法可以给当前活动创建菜单,inflate方法接收两个参数。第一个参数指定通过那个资源
文件创建菜单,例如传入R.menu.main.第二个参数用于指定将菜单项添加到哪一个Menu对象中,这里直接使用了onCreateOptionsMenu()方法传入的menu参数。
然后给这个方法返回true,表示允许将创建的菜单项显示出来,如果返回false,创建的菜单无法显示。
要菜单真正可以用,需要再定义菜单响应事件。在FirstActivity中重写onOptionsItemSelected()方法:
@Override
public boolean onOptionsItemSelected(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:
break;
}
return true;
}
在onOptionsItemSelected()方法中,通过调用item.getItemId()来判断点击哪一个菜单项。然后给每个菜单项加入逻辑处理。
2.6销毁活动
Activity类提供了一个finish()方法,通过调用finish()方法就可以销毁活动了。