*活动:
一种可以包含用户界面的组件,主要用于和用户进行交互
一个程序可以包含零个或多个活动
*注意在新建项目后,要把其他项目关闭,避免发生错误
右键->close project
*手动创建活动:
在src里,创建包,包名就用创建项目时候的默认包名
然后,包右键->新建FirstActivity类(继承自Activity类)
注意:项目中的任何活动都应该重写Activity类里的onCreate()方法
快捷方法:右键->source->override/implement method
*创建和加载布局:
安卓是逻辑和视图分离的,最好每个活动对应一个布局。布局就是用来显示界面内容的。
手动创建布局:res->layout->new->Android xml flie
这个是adt提供的可视化布局编辑器
最下面有两个选卡:
graphical layout是可视化编辑方式,可以通过拖拽啊之类的很方便
.xml是通过代码了
选择first_layout.xml选项卡
因为创建的时候选择的是linearlayout作为根元素,所以布局文件里已经有它了
添加一个按钮:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" > 6 7 <Button 8 android:id="@+id/button_1" 9 android:layout_width="match_parent" 10 android:layout_height="wrap_content" 11 android:text="Button 1" 12 /> 13 </LinearLayout>
android:id 是给当前元素定义的唯一标识。@+id/button_1(xml中定义语法) 和之前学的引用方法有点像: @string /hello_world(xml中引用语法)
在XML中引用id使用:@id/id的名字
在XML中定义id使用:@+id/id的名字
android:layout_width="match_parent" 指定当前元素宽度,和父元素一样宽
android:layout_height="wrap_content" 指定当前元素高度,高度刚好可以包含内容即可
android:text 指定元素中显示的文字内容
回到graphical layout选项卡发现有按钮啦~
然后我们需要 到活动里去加载这个布局 !
先复习下之前的一个内容
我们可以看出如何引用res下的资源:
1. 在代码中 R.string.hello_world 来引用
2. 在XML中 @string /hello_world 来引用
当我们想引用图片就把string部分换成drawable,布局文件是layout......
package com.example.activitytest; import android.app.Activity; import android.os.Bundle; public class FirstActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.first_layout); } }
setContentView(R.layout.first_layout); 使用这一句来加载布局。
调用R.layout.first_layout获得布局文件的id,然后通过setContentView()方法给当前活动加载布局。
此处的R是,如下图:
项目中添加的任何资源都会在R文件里生成对应的id。我们一般不去手动修改这个文件。
*在AndroidMainfest文件中注册:
所有活动都要在AndroidMainfest文件中注册才能生效
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.activitytest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" 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>
活动注册申明要放在<application>标签里面。
这里通过<activity>标签来进行活动的注册。
android:name=".FirstActivity" 来具体指定注册哪一个活动。.FirstActivity是com.example.activitytest.FirstActivity缩写(因为在mainfest标签中写明了是这个包所以可以缩写)
android:label="This is FirstActivity" 来指定活动中标题栏的内容,而且该内容会变成启动器中应用程序显示的名称
<intent-filter>标签中的两句:
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER" />
两句话说明本活动被定义为程序的主活动;即点击图标后首先打开的活动。
(一个活动没声明任何一个活动作为主活动,这个程序任然可以正常安装,一般作为第三方服务供其它的应用在内部进行调用,如支付宝快捷支付)
复习下前面的知识:
*隐藏标题栏:
package com.example.activitytest; import android.app.Activity; import android.os.Bundle; import android.view.Window; public class FirstActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); //这句一定要在setContentView前执行!!!否则会报错的 setContentView(R.layout.first_layout); } }
安卓4.0加入了Action Bar,能对标题栏这个位置进行很多的操作。
*在活动里使用Toast:
toast是一种提醒方式,将短小的信息提示给用户,这些信息会在一段时间后消失。
按下Button 1,然后弹出一个toast(注意需要导入多个包):
package com.example.activitytest; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.Toast; public class FirstActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.first_layout); Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(FirstActivity.this, "u clicked button 1", Toast.LENGTH_SHORT).show(); } }); } }
Button button1 = (Button) findViewById(R.id.button_1); //获得按钮实例
通过 findViewById()方法获取布局文件中定义的元素,这里传入R.id.button_1,来获得按钮的实例。
findViewById()返回的是一个View对象,需要向下转型,强制转型。
button1.setOnClickListener(... ...); //为按钮注册了一个监听器,点击Button 1按钮,就会执行监听器里的onClick()方法。
setOnClickListener(OnClickListener I)方法 是android.view.View中的方法,android.widget.Button继承了它
OnClickListener()是接口,里面有抽象方法onClick()
抽象方法onClick()需要被执行,所以重写了
Toast.makeText(FirstActivity.this, "u clicked button 1", Toast.LENGTH_SHORT).show();
通过静态方法makeText()创建出一个Toast对象,然后再调用show()方法就可以显示了。(静态方法调用:类名.方法,实例方法调用:对象名.方法)
makeText(...)方法详解:
以上是使用Toast的方法1,还有方法2:
package com.example.activitytest; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.Toast; public class FirstActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.first_layout); } public void selfDestruct(View view) { Toast.makeText(FirstActivity.this, "u clicked button 1", Toast.LENGTH_SHORT).show(); } } //FirstActivity.java
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/button_1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button 1" android:onClick="selfDestruct" /> </LinearLayout> <!-- first_layout.xml -->
相关详细说明: