赞
踩
活动( Activity)是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互。 一个应用程序中可以包含零个或多个活动,但不包含任何活动的应用程序很少见,谁也不想让自己的应用永远无法被用户看到吧?
你需要知道,项目中的任何活动都应该重写 Activity的 onCreate()方法,而目前我们的
FirstActivity中已经重写了这个方法,这是由 Android Studio自动帮我们完成的,代码如下所示:
public class FirstActivity extends AppCompatActivity {
@Overrid
protected void onCreate( Bundle savedInstanceState) {
super onCreate(savedInstancestate);
}
}
可以看到, onCreate()方法非常简单,就是调用了父类的 onCreate()方法。当然这只是默
认的实现,后面我们还需要在里面加入很多自己的逻辑。
我的理解:
每 个 活 动 可 以 理 解 为 一 系 列 操 作 的 一 个 基 本 动 作 , 我 们 有 一 个 起 始 动 作 M a i n A c t i v i t y , 每个活动可以理解为一系列操作的一个基本动作,我们有一个起始动作MainActivity, 每个活动可以理解为一系列操作的一个基本动作,我们有一个起始动作MainActivity,
接 着 我 门 可 以 创 建 和 选 择 任 意 一 个 自 己 想 要 的 动 作 ( a c t i v i t y ) 在 起 始 动 作 之 后 , 接着我门可以创建和选择任意一个自己想要的动作(activity)在起始动作之后, 接着我门可以创建和选择任意一个自己想要的动作(activity)在起始动作之后,
这 需 要 我 们 在 M a i n A c t i v i t y 中 去 调 用 它 , 这 里 我 们 可 以 使 用 I n t e n t 来 实 现 。 这需要我们在MainActivity中去调用它,这里我们可以使用Intent来实现。 这需要我们在MainActivity中去调用它,这里我们可以使用Intent来实现。
Intent是 Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。
Intent一般可被用于启动活动、启动服务以及发送广播等场景,由于服务、广播等概念你暂时还未涉及,那么本章我们的目光无疑就锁定在了启动活动上面。
Intent大致可以分为两种:显式 Intent和隐式 Intent
Intent有多个构造函数的重载,其中一个是 Intent( Context package Context, Class<?>cls)。这个构造函数接收两个参数,
第一个参数 Context要求提供一个启动活动的上下文,
第二个参数 Class则是指定想要启动的目标活动,通过这个构造函数就可以构建出 Intent的“意图”。
然后我们应该怎么使用这个 Intent呢?
Activity类中提供了一个 startActivity()方法,这个方法是专门用于启动活动的,它接收一个 Intent参数,这里我们将构建好的 Intent传入startActivity()方法就可以启动目标活动了。
代码如下所示:
buttonl. setonclickListener(new View. OnclickListener() {
@Override
public void onclick(View v) {
Intent intent new Intent (FirstActivity. this, SecondActivity. class);
startActivity(intent);
}
}
我们首先构建出了一个 Intent,传入 FirstActivity. this作为上下文,传入 SecondActivity. class作为目标活动,这样我们的“意图”就非常明显了,即在 FirstActivity这个活动的基础上打开 SecondActivity这个活动。然后通过 startActivity()方法来执行这个 Intent
Text View可以说是 Android中最简单的一个控件了,它主要用于在界面上显示一段文本信息,
修改 activity mainxml中的代码,如下所示:
<Linearlayout xmlns:android="http://schemas.androidcom/apk/res/android"
android: orientation="vertical"
android: layout width="match parent"
android: layout height="match parent">
<TextView
android: id="@+id/text view"
android: layout width="match parent"
android: layout height="wrap content"
android: text="this is textview"/>
</LinearLayout>
外面的 LinearLayout先忽略不看,在 TextView中我们使用 android:id给当前控件定义了个唯一标识符,
然后使用 android: layout width和android: ayout height指定了控件的宽度和高度。 Android中所有的控件都具有这两个属性,
可选值有3种: match parent、 fill parent和 wrap content。
其中 match parent和filL_ parent的意义相同,现在官方更加推荐使用 match parent。
match parent表示让当前控件的大小和父布局的大小一样,也就是由父布局来决定当前控件的大小。
wrap content表示让当前控件的大小能够刚好包含住里面的内容,也就是由控件内容决定当前控件的大小。
所以上面的代码就表示让 Text View的宽度和父布局一样宽,也就是手机屏幕的宽度,让 TextView的高度足够包含住里面的内容就行。
当然除了使用上述值,你也可以对控件的宽和高指定一个固定的大小,但是这样做有时会在不同手机屏幕的适配方面出现问题。接下来我们通过 android:text指定 Text View中显示的文本内容.
Button是程序用于和用户进行交互的一个重要控件,相信你对这个控件已经非常熟悉了,因为我们在上一章用了太多次 Button。
它可配置的属性和 TextView是差不多的,我们可以在activity main xml中这样加入 Button:
<Button
android: id="@+id/button"
android: layout width="match parent"
android: layout height="wrap content"
android: text="Button"/>
</LinearLayout>
接下来我们可以在 MainActivity中为 Button的点击事件注册一个监听器,如下所示:
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstancestate){
super on Create(savedInstancestate);
etContentView(R.layout.activity.main);
Buttonbutton = (Button)findviewById(R.id.button);
button.setoncClickListener(new View. OnClickListener(){
@override
public void onClick(View v){
//在此处添加逻辑
}
});
}
}
这样每当点击按钮时,就会执行监听器中的 onclick()方法,我们只需要在这个方法中加入待处理的逻辑就行了。
Editτext是程序用于和用户进行交互的另一个重要控件,它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理。
EditText的应用场景非常普遍,在进行发短信、发微博、聊QQ等操作时,你不得不使用EditText。
修改 activity.main.xml中的代码,如下所示
<liNearlayout xmins:android="http://schemas.androidcom/apk/res/android"
android: orientation="vertical"
android: layout width="match parent"
android: layout height="match parent">
<EditText
android: id="@+id/edit text"
android: layout width="match_ parent"
android: layout height="wrap_ content"/>
</LinearLayout>
其实看到这里,我估计你已经总结出 Android控件的使用规律了,用法基本上都很相似:
给控件定义一个id,再指定控件的宽度和高度,然后再适当加入一些控件特有的属性就差不多了。
AlertDialog可以在当前的界面弹出一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此 Alert Dialog一般都是用于提示一些非常重要的内容或者警告信息。比如为了防止用户误删重要内容,在删除前弹出一个确认对话框。
修改 Main Activity中的代码,如下所示
public class MainActivity extends App CompatActivity implements view.OnClickListener{ @Override public void onclick(View v){ switch (v.getIdo){ case r.id.button AlertDialog Builder dialog new AlertDialog Builder(MainActivity.this); dialog setTitle("This is Dialog"); dialog. setMessage("Something important. " ) dialog. set cancelable(false dialog. setPositiveButton("OK", new DialogInterface.OnClickListener(){ @Override public void onclick(DialogInterface dialog, int which){ } }); dialog. setNegativeButton("Cancel", new DialogInterface.OnclickListener( @Override public void onCLick(DialogInterface dialog int which){ } }); dialog.show () break: default } } }
首先通过 AlertDialog Builder创建一个 Alert Dialog的实例然后可以为这个对话框设置标题、内容、可否取消等属性,接下来调用 setPositiveButton()方法为对话框设置确定按钮的点击事件,调用setNegativeButton()方法设置取消按钮的点击事件,最后调用show()方法将对话框显示出来。
不同于文件的存储方式, SharedPreferences是使用键值对的方式来存储数据的。也就是说当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。
而且 Shared Preferences还支持多种不同的数据类型存储,如果存储的数据类型是整型,那么读取出来的数据也是整型的;如果存储的数据是一个字符串,那么读取出来的数据仍然是字符串。
①、将数据存储到 Shared Preferences中
要想使用 SharedPreferences来存储数据,首先需要获取到 SharedPreferences对象。 Android中主要提供了3种方法用于得到 SharedPreferences对象
②、从 SharedPreferences中读取数据
从 Shared Preferences文件中读取数据会更加地简单。
SharedPreferences对象中提供了一系列的get方法,用于对存储的数据进行读取,每种get方法都对应了 SharedPreferences. Editor中的一种put方法,比如读取一个布尔型数据就使用 getBoolean()方法,
读取一个字符串就使用 getstring()方法。这些get方法都接收两个参数,第一个参数是键,传人存储数据时使用的键就可以得到相应的值了;第二个参数是默认值,即表示当传入的键找不到对应的值时会以什么样的默认值进行返回。
SQLite是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百KB的内存就足够了,因而特别适合在移动设备上使用。 而 SQLite又比一般的数据库要简单得多,它甚至不用设置用户名和密码就可以使用。 Android正是把这个功能极为强大的数据库嵌入到了系统当中,使得本地持久化的功能有了一次质的飞跃。
前面我们所学的文件存储和 SharedPreferences存储毕竟只适用于保存一些简单的数据和键值对,当需要存储大量复杂的关系型数据的时候,你就会发现以上两种存储方式很难应付得了。比如我们手机的短信程序中可能会有很多个会话,每个会话中又包含了很多条信息内容,并且大部分会话还可能各自对应了电话簿中的某个联系人。很难想象如何用文件或者 SharedPreferences来存储这些数据量大、结构性复杂的数据吧?但是使用数据库就可以做得到。那么我们就赶快来看看, Android中的 SQLite数据库到底是如何使用的。
书P212。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。