新建一个Android项目,建立的时候选择Add No Activity,其他使用默认值。
-
手动创建活动
改为Project模式,定位到app/src/main/java/com.example.activitytest
-
初始化项目结构
右击com.example.activitytest
包,新建一个Empty Activity
,创建一个新活动FirstActivity
,不要勾选Generate Layout File 和 Launcher Activity 这两个选项。
项目中的任何活动都应重写
Activity
中的onCreate()
方法。
在我们的项目中,Android Studio已经自动帮我们重写了FirstActivity
这个方法
-
创建和加载布局
定位到app/src/main/res
,右击新建一个Directory,并命名为layout,然后在layout目录中新建Layout resource file,命名为first_layout,根元素保持默认的LinearLayout。
将弹出的布局编辑器切换到Text模式,Text是通过XML的方式编辑布局。
由于我们刚才创建布局文件的时候选择了LinearLayout作为根元素,因为现在布局文件中已经有一个LinearLayout元素。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
在这个布局的基础上添加一个按钮。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
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="Dont push it!"
tools:ignore="InvalidId" />
</LinearLayout>
android:id
给当前的元素定义一个唯一标识符,之后可以在代码中对这个元素进行操作。在XML中创建一个id使用@+id/id_name
这种语法,而引用一个id使用@id/id_name
这种语法。
-
在活动中加载这个布局
回到FirstActivity,在onCreate()
方法中加入以下代码:
public class Fristactivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
}
}
这里调用了setContentView()
给当前的活动加载了一个布局,而在setContentView()
我们传入一个布局文件的id。
在项目中添加的任何资源都会在R文件中生成一个相应的资源id,所以我们刚才创建的
first_layout.xml
布局的id已经添加到R文件中了。因此只要调用R.first_layout
,就可以得到它的id,然后将这个值传入到setContentView()
方法即可
-
在AndroidManifest文件中注册
所有的活动都要在AndroidManifest.xml文件中注册才能生效,实际上Android Studio已经帮我们完成了FirstActivity
在AndroidManifest.xml
中的注册了,如下图所示。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.silver.secondlayout">
<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=".Fristactivity"></activity>
</application>
活动的注册声明要放在<application>
标签内,在这个标签内使用<activity>
标签对活动进行注册。
在<activity>
标签中使用了android:name
来指定注册的活动,填入的.FirstActivity
只不过是com.example.activitytest.FirstActivity
的缩写。之所以可以使用缩写是因为在在最外层的<manifest>
标签中已经通过package
属性指定了程序的包名为com.example.activitytest
,所以在此可以省略。
但是,仅注册了活动,我们的程序依然是不能运行的。因为在app启动后它不知道首先应该运行哪一个活动。
-
配置主活动
同样是在AndroidManifest.xml
中操作,在<activity>
的内部加入<intent-filter>
标签,并且在这个标签内添加
<action android:name = "android.intent.action.MAIN"/>
<action android:name = "android.intent.category.LAUNCHER"/>
这两句声明即可
-
在活动中使用Toast
Toast是Android系统提供的一种非常好的提醒方式,在程序中使用它将一些短小的消息通知给用户,这些消息会在一段时间后自动消失,不占用任何屏幕空间。
使用方法
首先定义一个Toast的触发点,在这个案例定义为点击按钮的时候弹出一个Toast。在onCreate()
方法中添加以下代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button botton1 = (Button) findViewById(R.id.button_1);
botton1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(Fristactivity.this, "Okay you pushed it",Toast.LENGTH_SHORT).show();
}
});
}
在活动中,可以通过findViewById()
方法获取到在布局文件中定义的元素。这里我们传入R.id.button_1
来获得按钮的实例。findViewById
返回的是一个View对象,我们需向下转型把它转换为Button对象。在得到按钮的实例之后,我们调用setOnClickListener()
方法为按钮注册一个监听器,点击按钮就会执行监听器中的onClick()
方法。所以弹出Toast的功能要在onCreate()
方法中编写。
Toast的用法很简单,通过静态方法makeText()
创建出一个Toast对象,然后调用show()
将Toast显示出来就可以了。makeText()
方法需要传入3个参数,第一个是Context,也就是Toast要求的上下文,由于活动本身就是一个Context对象,因此这里直接传入FirstActivity.this
即可。第二个参数是Toast显示的文本内容,第三个参数是Toast显示的时长,有两个内置常量可供选择,分别是Toast.LENGTH_SHORT
和Toast.LENGTH_LONG
-
在活动中使用Menu
首先在res目录下新建一个menu文件夹。接下来在这个文件夹下新建一个名称为amenu的菜单文件(Menu resource filed)。
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/add_item"
android:title="Add" />
<item
android:title="Remove"
android:id="@+id/remove_item"/>
</menu>
amenu内容如上所示。这里创建了两个菜单项,其中<item>标签就是用来创建具体的某一个菜单项,然后通过android:id'给这个菜单项指定一个唯一的标识符,使用
android:title`指定菜单项的名称。
接下来在Firstactivity
重写onCreateOptionMenu()
方法,重写方法可以使用Ctrl+O,然后选取onCreateOptionMenu()
,将它改为如下代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.amenu ,menu );
return true;
当然点击这个amenu之后应该有对应的菜单响应事件。在FirstActivity
中重写onOptionsItemSelected()
方法,重写方法可以使用Ctrl+O快捷键,选取onOptionItemSelected,然后重写为以下内容:
@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:
}
return true;
}
这样,我们就完成了菜单栏的编写。