Android_1_第一个项目

想写点什么,不知道从那里开始,正好想复习安卓基础那就写写安卓基础吧!!

当创建第一个项目时,文件新建一直下一步直到完成,系统会自动生成一个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和生命周期相关的方法

  1. onCreate() 当Activity被创建时执行
  2. onStart() 当Activity可见时执行
  3. onResume() 当Activity获得焦点时执行
  4. onPause() 当Activity失去焦点时执
  5. onStop() 当Activity不可见时执行
  6. 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  控件本身相对于父元控件的对齐方式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,496评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,187评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,091评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,458评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,542评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,802评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,945评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,709评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,158评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,502评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,637评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,300评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,911评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,744评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,982评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,344评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,500评论 2 348

推荐阅读更多精彩内容