0x00 活动是什么

活动(Activity)是一众可以包含用户界面的组件,主要用于和用户交互。

0x01 手动创建一个活动

创建活动

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
    }
}
  • 项目中的任何活动都应该重写 Activity 的 onCreate() 方法

0x02 创建和加载布局

创建布局

<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" />
</LinearLayout>
  • LinearLayout 是布局根元素之一
  • android:id 是给当前元素定义一个唯一标识符,可以再代码中根据标识符对这个元素进行操作
  • match_parent 表示让当前元素的尺寸和父元素相同,wrap_content 表示当前元素的尺寸刚好包含里面的内容

在活动中加载布局

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout); // 通过 setContentView 方法加载布局
    }
}
  • 其中 first_layout 是布局文件名
0x03 在 AndroidManifest 文件中注册

所有的活动都要在 AndroidManifest.xml 中进行注册才能生效

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.activitytest">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".FirstActivity"
            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>
  • <activity> 标签中使用 android:name 来指定具体注册哪一个活动
  • .FirstActivity 是 com.example.activitytest.FirstActiviity 的缩写,在最外层 <manifest> 标签中定义了 package 属性
  • 配置主活动的方法就是在 <activity> 标签的内部加入 <intent-filter> 标签,并在内部加入如上的两句声明
  • 可以使用 android:label 指定活动中标题栏的内容,标题栏是显示在活动最顶部的,给主活动指定的 label 不仅会成为标题栏中的内容,还会成为启动器(Launcher)中应用程序显示的名称
  • 如果应用程序中没有声明任何一个活动作为主活动程序仍然可以正常安装,只是启动器中无法看到或打开这个程序,这种程序一般作为第三方服务工其他应用在内部调用,如支付宝快捷支付服务
0x04 活动中使用 Toast(简单消息通知)

点击按钮显示消息通知

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) { // 重写父类方法

            Toast.makeText(FirstActivity.this, "You clicked Button 1", Toast.LENGTH_SHORT).show();
        }
    });
}
  • 通过 findViewById() 方法可以获取到布局文件定义的元素,传入 R.id.button_1 来获取按钮的实力(button_1 为布局中的 id 属性),findViewById() 方法返回的是一个 View 对象,需要向下转型成 Buttonb 对象
  • 通过 setOnClickListener() 方法为按钮注册一个监听器,点击按钮就会执行监听器中的 onClick() 方法
  • makeText() 方法需要传入3个参数。第一个参数是Context,也就是上下文,活动本身就是一个 Context 对象,所以直接传入 FirstActivity.this 即可。第二个参数是 Toast 显示的文本内容。第三个参数是 Toast 显示的时长,有两个内置常量 Toast.LENGTH_SHORT 和 Toast.LENGTH_LONG 可选择。

在活动中使用 Menu

未完成……

标签: Android

添加新评论