想写点什么,不知道从那里开始,正好想复习安卓基础那就写写安卓基础吧!!
当创建第一个项目时,文件新建一直下一步直到完成,系统会自动生成一个MainActivity.class这个类继承自Activity,有的版本比 较高可能不是直接继承Activty而是继承自AppCompatActivity或其他,他们也是Activity的直接或间接子类。
系统生成的Activity的代码
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置Activity的布局文件
setContentView(R.layout.activity_main);
}
}
Activity
Activity是安卓四大组件之一,他控制着界面的显示,是个安卓控件的容器,用户用程序列交互的主要载体,在一般MVC的模式下的安卓项目,逻辑部份代码也会写在Activity中,也就是说在MVC模式下Activity即是View又是Controller.
MVC
MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的 模式:
Model(模型)表示应用程序核心(比如数据库记录列表)。
View(视图)显示数据(数据库记录)。
Controller(控制器)处理输入(写入数据库记录)。
MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不 依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。
MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
每个Activity都直接或间接继承了Activity,当创建一个Activity时我们需要复写Activity里面的onCreate() 方法,在onCreate方法里调用setContentView(layou)方法,传入的参数就是这个 Activity的布局样式,也就是你这个Activity页面的layout文件的对应id,安卓默认会为每一个资源文件分配一个唯一id,这个layout文件就是由安卓的控件组成,控件也是安卓界面上的组成部分,就像汽车有很多零配件组成一样。
在Activity和生命周期相关的方法
- onCreate() 当Activity被创建时执行
- onStart() 当Activity可见时执行
- onResume() 当Activity获得焦点时执行
- onPause() 当Activity失去焦点时执
- onStop() 当Activity不可见时执行
- onDestroy() 当Activity被销毁时执行
一般我们会在onCreate()方法中做一些Activity初始化的操作,在onDestroy()方法中做一些,页面资源的释放的操作,比如bitmap的释放,取消网络请求等
当定义一个Activity想要在运行时打开这个Activity必须要把这个Activity定义到清单文件中,方法是在AndroidManifest.xml文件中的application节点下添加一个activity标签并添加name属性,值设置为:项目包名.子包名.类名用,或缺省项目包名:.子包名.类名.
默认生成的Activity在AndroidMenifest.xml中的定义
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:theme="@style/AppTheme">
<activity android:name=".activity.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
其中intent-filter这个子标签是一个过滤器,指定这个Activity是这个应用程度的第一个页面也就是 这个页面是这个应用的主界面,'android.intent.action.MAIN'决定应用程序最先启动的 Activity'
android.intent.category.LAUNCHER'决定应用程序是否显示在程序列表里,也就是这个Activity 是不是一个启动的Activity
布局
每一个Activity都必须有一个布局,最常见的是我们为每个Activity定义一个xml格式的布局文件,这个 布局文件就是由控件组成的用来展示的界面。
系统默认生成的布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
第一行是标准的xml头
第二行是定义一个RelativeLayout(相对布局)标签,最后一行是表示这个相对布局结束的标签,xmlns是xml name space xml的命名空间,也就是声名一个android的前缀,他默认指向一个命名空间,这个命名空间也是安卓系统默认的命名空间,声名这个前缀后可以直接以'android:属性='的方式使用这个命名空间里为控件定义好的属性,安卓系统本身为默认控件定义好了很多属性;在中间的TextView标签是表示在相对布局中添加一个子控件一个文本显示的控件。
安卓常用布局
帧布局(FrameLayout)
在他里面的的所有显示都将固定在屏幕的左上角,只能通过本身的gravity,padding属性或者子控件的layout_gravity,margin属性设置位置,允许有多个显示对象.
属性
Android:foreground 设置该帧布局容器的前景图像;
android:foregroundGravity 设置前景图像的显示位置
相对布局(RelativeLayout)
相对布局 RelativeLayout 允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一。它灵活性大很多,当然属性也多,操作难度也大,属性之间产生冲突的的可能性也大,使用相对布局时要多做些测试。
常用属性:
android:layout_above 将该控件的底部置于给定ID的控件之上;
android:layout_below 将该控件的底部置于给定ID的控件之下;
android:layout_toLeftOf 将该控件的右边缘与给定ID的控件左边缘对齐;
android:layout_toRightOf 将该控件的左边缘与给定ID的控件右边缘对齐;
android:layout_alignBaseline 将该控件的baseline与给定ID的baseline对齐;
android:layout_alignTop 将该控件的顶部边缘与给定ID的顶部边缘对齐;
android:layout_alignBottom 将该控件的底部边缘与给定ID的底部边缘对齐;
android:layout_alignLeft 将该控件的左边缘与给定ID的左边缘对齐;
android:layout_alignRight 将该控件的右边缘与给定ID的右边缘对齐;
android:layout_alignParentTop 如果为true,将该控件的顶部与其父控件的顶部对齐;
android:layout_alignParentBottom 如果为true,将该控件的底部与其父控件的底部对齐;
android:layout_alignParentLeft 如果为true,将该控件的左部与其父控件的左部对齐;
android:layout_alignParentRight 如果为true,将该控件的右部与其父控件的右部对齐;
android:layout_centerHorizontal 如果为true,将该控件的置于水平居中;
android:layout_centerVertical 如果为true,将该控件的置于垂直居中;
android:layout_centerInParent 如果为true,将该控件的置于父控件的中央;
线性布局(LinearLayout)
线性布局是所有布局中最常用的类之一,也是RadioGroup, TabWidget, TableLayout, TableRow, ZoomControls类的父类。LinearLayout可以让它的子元素垂直或水平的方式排成一行(不设置方向的时候默认按照垂直方向排列)。
常用属性:
android:gravity 自己所有子控件的对齐方式,设置在父元素上,多个值用|隔开
android:orientation 线性布局以列或行来显示内部子元素
android:layout_weightSum 设置线性布局的总权重数,如不设置为子类设置权重之和
android:layout_weight 分配权重值,其值越小,权重越大,用在线性布局的子控件上
绝对布局(AbsoluteLayout)
绝对定位AbsoluteLayout,又可以叫做坐标布局,可以直接指定子元素的绝对位置,这种布局简单直接,直观性强,但是由于手机屏幕尺寸差别比较大,使用绝对定位的适应性会比较差。
网格布局(GridLayout)
4.0新增布局。控件从做到右,从上到下排列
表格布局(TableLayout)
以表格的形式而已
约束布局(ConstraintLayout) (更像相对布局的升级版)
布局示例:引用 无恨星晨 的博客
在布局对象中定义的控件默认先定义的控件,也就是写在前面的控件会在底层,后定义的会在先定义的控件上层
常用属性列举
id 为控件定义一个id
layout_width 指定控件的宽
layout_height 指定控件的高
margin 指定控件相对父控件或兄弟控件的边距
marginLeft 指定控件相对父控件或兄弟控件的左边距
margintRight 指定控件相对父控件或兄弟控件的右边距
marginTop 指定控件相对父控件或兄弟控件的上边距
marginBottom 指定控件相对父控件或兄弟控件的下边距
padding 指定控件子控件或内容与与本身的边距
paddingLeft 指定控件子控件或内容与与本身的左边距
paddingRight 指定控件子控件或内容与与本身的右边距
paddingTop 指定控件子控件或内容与与本身的上边距
paddingBottom 指定控件子控件或内容与与本身的下边距
text 指定可显示文字的控件的文字内容
layout_gravity 控件本身相对于父元控件的对齐方式