上一章成功创建了自己的第一个项目。这一章从页面入手,来进行学习。
Activity 是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用可以有零个或者多个 Activity。
自己手动创建一个没有 Activity 的新项目
项目创建成功后,看到如下目录
初始化项目.png
自己手动创建一个 Activity
右击 包名com.example.firstcode
—>New
—>Activity
—>Empty Activity
这个时候会弹出一个对话框,然后不要选择 Generate LayoutFile
和Launcher Activity
,然后点击 Finish
创建Activity.png
如果勾选了 Generate Layout File
后会自动给我们的 Activity 创建一个 Layout 布局,勾选了 Launcher Activity
后表示自动将当前 Activity 设置为主 Activity。这些内容留给我们后面自己实现。
好了现在我们自己创建了一个 Activity 了,任何 Activity 都要重写 onCreate 方法。
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle saveInstanceState){
super.onCreate(savedInstanceState);
}
}
可以看到刚刚生成的 Activity 的代码内容很简单,在 onCreate
方法中就是调用了父类的 onCreate
方法,这是默认的实现方式,后面很多的代码还需要我们自己来慢慢填满!
Android 的程序设计是讲究逻辑和视图分离的,最好要做到每个 Activity 都对应一个布局,布局是专门用来显示界面内容的。下面我们就来创建一个布局。
右击 app/src/main/res
目录——>New----->Directory,会弹出一个
新建目录的窗口,先创建一个 layout
的目录。然后对 layout
目录右键—>New-->Layout resource fie,这个时候就会弹出新建布局资源文件的窗口。
first_layout.png
这里我们这样取名fist_layout
Root element 选择 LinearLayout
然后点击 OK
布局编辑器.png
看到图中的布局编辑器,这是 Android Studio 为我们提供的可视化布局编辑器,在这里我们可以浏览我们布局的样子。在窗口下方有两个切换卡,左边是 Design
右边是 Text
。Design
是可视化布局编辑器,这这里可以预览布局,也可以通过拖拽编辑布局。Text
是通过 xml 来编辑布局。下面切换到 Text 模式。
布局编辑器_text.png
左边就是我们的布局代码部分,我们刚刚创建的时候选择了 LinearLayout
布局作为根布局,所以这里就是LinearLayout
。下面对布局添加一个按钮。
<?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:text="Button"
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
简单介绍一下 Button 里面的几个属性:
android:id=@+id/id_name
引用的格式@id/id_name
match_parent
表示让当前元素和父元素一样宽。wrap_content
表示高度刚好可以包裹元素内容。关于布局的编写详细内容,会在下一章内容重点讲解。
预览当前布局.png
预览一下这个布局,有可能你的和我的不太一样,没关系只要你的按钮显示出来就可以了。不一样的原因是我们的样式选择不一样。你可以看到上面有个 Light
这个是用来选择样式的,还有 小眼睛的标志
也有可能导致我们的预览效果看上去不一样。(这些东西在初学阶段不用去纠结)
布局已经加载出来了,下面我们要做的就是让 Activity 去加载这个布局。
回到 MainActivity
在 onCreate
方法中添加:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 用于给当前 Activity 加载一个布局
setContentView(R.layout.first_layout);
}
我们在 onCreate
方法中添加了 setContentView()
方法来加载一个布局,需要传入一个布局的 id。Android 项目中任何的资源(res)包中的东西都会在 R 文件中生成一个对应资源的 id 因此我们可以通过 id 就可以将我们刚刚创建的布局加载到 Activity 中 了。
任何 Activity 都需要在 AndroidManifest.xml
中注册才可以使用。实际上我们的 MainActivity
已经在 AndroidManifest
中注册了。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.firstCode">
<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name="com.example.firstcode.MainActivity"></activity>
</application>
</manifest>
这是我们在创建 Activity 的时候,开发工具 Android Studio 自动给我们注册的。
注册方式:在 <application>
标签内容,通过 <activiy>
标签来注册。
介绍一下 <activity>
中的属性,通过 android:name
来指明是哪一个 Activity。仅仅这样注册是不行的,因为没有给程序配置一个主 Activity,这样程序在运行的时候就不知道首先启动哪一个 Activity。
配置主 Activity 的方式:
在 activity
标签内添加<intent-filter>
标签。如
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name = "android.intent.category.LAUNCHER"/>
</intent-filter>
这样就会指定当前 Activity 为主 Activity。
除此之外,使用 android:label
属性来指定 Activity 的标题栏中的内容,标题栏是显示在 Activity 最顶部的(当然可以去掉)。注意:给主 Activity 设置 label 后,启动器中应用程序显示的名称也会是这个。
如果没有指定主 Activity 的话,程序是无法运行的。
没有主Activity.png
好了,经过上面的步骤后,我们就可以运行程序了。
首次运行.png
在页面最上面就是一个标题栏(如果你没有那是样式不一样,暂时忽略)。标题栏下面就是布局文件first_layout
编写的界面。
好了,现在我们已经掌握了如何创建一个 Activity 了下面继续学习我们在 Activity 中还可以做些什么!
Toast 是 Android 系统中一种非常好的提醒方式,可以将一些短小的信息通知给用户,这些信息一段时间后会自动消失,并且不会占用任何屏幕空间。
要想使用 Toast ,首先我们需要有一个触发事件。我们就设置点击按钮的时候弹出 Toast 吧。在 onCreate
中添加代码:
Button bt = findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Toast.makeText(MainActivity.this,"显示内容",Toast.LENGTH_SHORT).show();
}
});
在 Activity 中可以通过 findViewById()
方法来获取当前布局中的定义元素。传出的就是你想要获取的那个元素的 id。调用 setOnClickListener
是给这个元素注册一个监听器,用于监听是否有点击。点击触发时就会调用 onClick
方法。
Toast 的使用方法很简单,通过调用它的静态方法makeText
会创建一个 Toast 对象,然后调用 show
方法,展示 Toast。makeText 方法需要传入三个参数,Context参数:上下文,Activity本身是Context 的子类。第二个参数就是要显示的内容,第三个参数是显示的时长,只能选择Toast.LENGTH_SHORT
或者 Toast.LENGTH_LONG
。
运行结果:
Toast运行结果.png
手机不通与电脑,屏幕空间有限,需要充分的利用好手机空间,如果 Activity 中有大量的菜单,那么只是菜单就占据了大部分屏幕,是非常不合理的设计。Android 为了解决这个问题给我们提供了菜单
首先在 res
目录,新建一个 menu
目录,然后在 menu
目录内容新建一个 menu resource file
,取名 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
来给这个菜单项设置唯一标识,通过 title
这个属性给菜单项指定名称。
然后到 Activity 中重写 onCreateOptionsMenu()
方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
通过 getMenuInflater()
获取 MenuInflater
对象,然后调用他的 inflate
方法。第一个参数就是指定我们创建的 Menu 的资源,第二个参数,用与指定我们的菜单将会添加到那个 Menu 对象中,这里直接使用方法中的 menu 然后 return true,表示运行菜单显示出来,如果是 false 则创建的菜单无法显示(三个点也没有)。
仅仅让菜单显示出来是不够的,我要对菜单进行操作,就用到方法 onOptionsItemSelected()
了。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(this,"add",Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this,"remove",Toast.LENGTH_SHORT).show();
break;
}
return true;
}
在 onOptionsItemSelected()
方法中通过 item.getItemId() 来判断我们点击了那个菜单项。
运行程序:
menu.png
会发现在标题栏多了三个点
,点击这三个点就会弹出菜单了。
弹出菜单.png
想要销毁 Activity 很简单,Activity 给我们提供了一个方法finish()
我们只要调用一下这个方法,当前的 Activity 就会销毁。
本文分享自 Android开发者家园 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!