韩老师安卓笔记

这是一份面向Android开发初学者的基础教程,详细介绍了Android Studio的使用、开发环境配置、核心知识点,包括布局管理、组件使用、Gradle知识、Android Studio的IDE界面和项目结构,以及开发工具的安装和配置。教程还涵盖了Android应用的运行方式,包括虚拟机和真机运行,并提供了布局管理器如LinearLayout、TableLayout和FrameLayout的案例分析。此外,内容还涉及Intent的概念、分类、Intent过滤器及其在实际应用中的案例,以及事件处理和资源访问等基础知识。
摘要由CSDN通过智能技术生成
# Android教程
这是一个基于Android平台开发的基础案例集。旨在用于给初学者快速了解Android平台的开发。


开发工具和平台


* Android Studio 2.0以上
* java语言
* android sdk
* gradle 2.0以上
* git
* github


## 问答


#### 案例集面向谁?
主要是面对高校以及一些对Android开发零基础的人群。


## 目录
1. LayoutDemo 关于android中布局相关案例集,包括:线性布局,表格布局,相对布局,绝对布局以及Frame布局
2. ComponentUI 关于android中核心控件以及控件事件处理的相关案例集。


## 开发者


* zzxb


## 版本
V 1.0.0


## 核心知识点


#### 学习前准备
1.[下载android studio IDE](http://www.android-studio.org/index.php/download/androidstudio-download-baidudisk/)
2.熟悉最基本的面向对象语言开发JAVA
3.学习android开发的知识体系,如下图




#### android studio 开发工具的安装
参考[安装与配置](http://stormzhang.com/devtools/2014/11/25/android-studio-tutorial1/)


#### 关于Gradle知识的了解
在首次安装Android Studio或首次创建Android工程时,会自动下载一个软件,你会发现很慢,甚至你会认为软件处于假死状态,请注意,不要强制关闭软件,因为这样会导致日后工程不能使用等问题。那么,到底是自动下载什么呢?为什么这么慢呢?


1.首先自动下载的是一个自动化构建的工具,它叫Gradle,与[Maven](https://github.com/zzxb/tec-docs/blob/master/Maven_install.md)是一样的功能。


2.下载慢是因为Gradle这个软件在Google端,需要科学上网才能提高或者顺利下载。建议大家,在学习android的时候一定要学会科学上网方式。


那么,到底什么是Gradle?


Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。


Android Studio除了要下载Gradle,还需要下载一个插件[gradle-plugin](https://developer.android.com/studio/releases/gradle-plugin.html),它是后期在Android Studio编译打包代码最重要的插件.


###### 注意:初学者首次使用Android Studio时,很多不能正常运行的工程大部分都是由于Gradle和Gradle-plugin下载不完整导致。


#### Android Studio的使用
1.首页介绍,如下图:






2.新建工程,已在安装Android Studio中介绍了。


3.打开已存在的工程。如下图:






4.进入主界面,各Bar介绍






5.菜单栏,如下图:






6.工程项目透视图有多种,常用两种,如下图:


 


7.代码编辑区,如下图:






8.用于观察后台日志或监控程序执行过程以及性能的监控控制台,如下图:






9.对Gradle自动构建手动的操作,使用Gradle生命周期控制台,如下图:






###### 以上就是对于Android Studio IDE界面的介绍,下面我们来看看,基于Android Studio的目录结构。
首先,Android Studio中没有像Eclipse或MyEclipse中WorkSpace(工作空间)的概念,只有工程或项目的概念,在Android Studio中的工程包含多个Moudle(模块).每个模块都可以独立运行或被引用。Android Studio强烈建议一个工程或项目多Moudle(模块)的设计,这样更加的便于维护和开发。


那么,我们来看一下目录结构,以及它们的作用。


1.我们再来回顾一下Android工程透视图,如下图:






app模块是我们关注的重点


2.mainifests目录下mainifest.xml,如下图:






该文件是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试),同时用于控制Android应用的名称、图标、访问权限等整体属性。


3.java目录是源代码目录,如下图:






4.res目录是所有android模块下所有资源文件的集合,比如:layout布局xml配置文件,图片资源文件集合,资源信息或国际化配置信息文件。






那么,我们逐个看一下各个子目录作用以及文件。


###### drawable目录,将图片等资源放在drawable-hdip中,将一些和XML文件相关的内容(图片选择器、文字颜色选择器、自定义形状等)放在drawable中。




###### layout目录,放置所有界面的布局xml文件。




###### 具体布局样例,如图:




###### mipmap目录,用于存放原生图片(图ic_launcher.png),缩放上有性能优化;




###### values目录,讲所有字符串资源文件,颜色等资源文件




###### strings.xml 字符串资源文件




###### colors.xml 颜色资源文件




###### dimens.xml 颜色资源文件




5.Gradle Script目录,关于所有Gradle的配置文件。






###### build.gradle(project)
设置整个工程的gradle配置文件


###### build.gradle(Module)
设置工程中某个模块的gradle配置文件,这个文件是我们关注的重点,尤其是当我们引入第三方类库时,要在这个文件中配置。如下图:






###### gradle-wrapper.properties
配置gradle的基本信息,例如:安装目录等信息。一般,我们很少修改。


###### gradle.properties
配置gradle编译运行以及性能的配置文件


###### local.properties
配置android sdk目录位置


#### 关于android运行
对于android程序运行,目前有两种方式:虚拟机和真机运行


虚拟机,这种方式可以在android studio中配置,也可以直接使用第三方虚拟机,比如:[genymotion](https://www.genymotion.com/)和[海马玩](http://droid4x.haimawan.com/)等.介于genymotion访问速度非常慢的原因,大家也可以使用海马玩。第三方虚拟机的方式不需要配置安装直接运行,android studio会以真机运行方式执行安装和运行。


真机运行,这种方式用USB线连接电脑的方式直接安装运行。


##### 我建议使用这种方式,因为真机运行可以更准确的测试程序兼容性、性能等情况。


###### 推荐一个基于chrome的第三方插件-Vysor,这是一个可以将真机屏幕投射到电脑上的插件,可以用于演示项目。


#### 1. LayoutDemo之android布局


##### 有哪些布局类型?
Android系统中为我们提供的五大布局:LinearLayout(线性布局)、FrameLayout(单帧布局)、AbsoluteLayout(绝对布局)、TablelLayout(表格布局)、RelativeLayout(相对布局)。其中最常用的的是LinearLayout、TablelLayout和RelativeLayout。这些布局都可以嵌套使用。


##### LinearLayout(线性布局)
线性布局是按照水平或垂直的顺序将子元素(可以是控件或布局)依次按照顺序排列,每一个元素都位于前面一个元素之后。线性布局分为两种:水平方向和垂直方向的布局。分别通过属性android:orientation="vertical" 和 android:orientation="horizontal"来设置。


案例代码分析:


```xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_vertical|center_horizontal"
    tools:context="zzxb.me.layoutdemo.MainActivity">


    <Button
        android:id="@+id/linearLO"
        android:text="@string/linear_name"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


    <TextView
        android:layout_weight="4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


    <Button
        android:id="@+id/tableLO"
        android:text="@string/table_name"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


    <TextView
        android:layout_weight="4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />




    <Button
        android:id="@+id/frameLO"
        android:text="@string/frame_name"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


    <TextView
        android:layout_weight="4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />




    <Button
        android:id="@+id/relativeLO"
        android:text="@string/relative_name"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


    <TextView
        android:layout_weight="4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />




    <Button
        android:id="@+id/absLO"
        android:text="@string/abslayout_name"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


</LinearLayout>
```


线性布局是用标签标示,其中常用的属性:
layout_width/layout_height:设置宽度和高度,其值有:wrap_content(适配内容大小),match_parent(适配父容器大小),此两个属性在各个控件中为通用属性
id:唯一标识该控件值
orientation:设置该布局是水平布局(horizontal)还是纵向布局(vertical)
gravity:设置控件的对齐方式,常用值:center_vertical(纵向居中)|center_horizontal(水平居中)


在标签中,也同样有id,layout_width以及lay_height属性。同时,还有如下常用属性:
text:设置按钮文字,这里有两种方式,一种是直接硬编码,即直接写内容,例如:


```xml
   android:text="按钮"
```


第二种方式是非硬编码方式,是通过配置strings.xml文件来配置,例如:


```xml
<resources>
   <string name="btnText">按钮</string>
</resources>
```


然后,通过:


```xml
android:text="@string/btnText"
```


引用。


页面跳转的方式:


```java
                Intent intent = new Intent();
                intent.setClass(MainActivity.this,LinearActivity.class);
                startActivity(intent);
```


##### TableLayout(表格布局)
表格布局与常见的表格类似,以行、列的形式来管理放入其中的UI组件。表格布局使用标签定义,在表格布局中,可以添加多个标签占用一行。由于标签也是容器,所以还可以在该标签中添加其他组件,每添加一个组件,表格就会增加一列。在表格布局中,列可以被隐藏,也可以被设置为伸展的,从而填充可利用的屏幕空间,还可以设置为强制收缩,直到表格匹配屏幕大小。


TableLayout跟TableRow 是一组搭配应用的布局,TableLayout置底,TableRow在TableLayout的上方,而Button、TextView等控件就在TableRow之上.TableLayout是一个应用错杂的布局,最简单的用法就仅仅是拖沓控件做出个界面,但实际上,会经常在代码里应用TableLayout,例如做出表格的结果。


重要的几个属性如下:


```xml
    android:collapseColumns="1,3" 隐藏第二列和第4列的控件
    android:stretchColumns="0,2,4" 第一列和三列以及第五列的空白textview被拉伸
    android:shrinkColumns="1,3"  第二列和第4列的控件被收缩
```


案例代码:


```xml
    <TableLayout
        android:stretchColumns="0,2,4"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <EditText
            android:hint="请输入用户名"
            android:textSize="15sp"
            android:layout_margin="6dp"
            android:background="@drawable/corner_round"
            android:drawableLeft="@mipmap/account"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />


        <EditText
            android:hint="请输入密码"
            android:layout_margin="6dp"
            android:textSize="15sp"
            android:inputType="textPassword"
            android:background="@drawable/corner_round"
            android:drawableLeft="@mipmap/passwowrd"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />


        <TableRow>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />


            <Button
                android:text="登录"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />


            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />


            <Button
                android:text="注册"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />


            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />


        </TableRow>
    </TableLayout>
```


##### FrameLayout(帧布局)
帧布局被设计成在一个屏幕区域显示一个单一的项(single item)。通常FrameLayout显示一个单一的子控件,它支持的布局属性不够丰富,一般通过layout_gravity来设置子控件的位置。
FrameLayout的子控件被绘制在一个堆栈中,最近添加进来的子控件在堆栈的顶部。


图例:


案例代码:


```xml
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@mipmap/movie"
            android:contentDescription="@string/movie_desc"
            />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/button"
            android:contentDescription="@string/pause_desc"
            android:layout_gravity="center"
            />




    </FrameLayout>
```


##### RelativeLayout(相对布局)
相对布局,子控件的位置关系可以通过子控件与父控件、子控件与子控件来确定,子控件之间位置可以重叠,后面的控件会盖在前面控件之上,拓展性好,灵活方便,是使用最多的布局方式。


案例代码:


```xml
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">


        <EditText
            android:id="@+id/et_uname"
            android:hint="请输入用户名"
            android:textSize="20sp"
            android:background="@drawable/corner_round"
            android:layout_alignParentTop="true"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />


        <EditText
            android:id="@+id/et_pwd"
            android:hint="请输入密码"
            android:inputType="textPassword"
            android:layout_marginTop="12dp"
            android:background="@drawable/corner_round"
            android:textSize="20sp"
            android:layout_below="@+id/et_uname"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />


    </RelativeLayout>


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">


        <Button
            android:id="@+id/btn_login"
            android:text="登录"
            android:layout_width="150dp"
            android:layout_height="wrap_content" />


        <View
            android:id="@+id/v1"
            android:layout_toRightOf="@+id/btn_login"
            android:layout_width="50dp"
            android:layout_height="0dp" />


        <Button
            android:id="@+id/btn_reg"
            android:layout_toRightOf="@+id/v1"
            android:text="注册"
            android:layout_width="150dp"
            android:layout_height="wrap_content" />


    </RelativeLayout>
```


相对布局使用标签,其常用属性如下:


android:layout_toLeftOf="@+id/name" 指定控件的左边
android:layout_toRightOf="@+id/name" 指定控件的右边
android:layout_above="@+id/name" 指定控件的上边
android:layout_below="@+id/name" 指定控件的下边
ndroid:layout_alignLeft="@+id/name" 与指定控件左对齐
android:layout_alignRight="@+id/name" 与指定控件右对齐
android:layout_alignTop="@+id/name" 与指定控件顶部对齐
android:layout_alignBottom="@+id/name" 与指定控件底部对齐
android:layout_alignParentLeft="true" 与父控件的左边对齐
android:layout_alignParentRight="true" 与父控件的右边对齐
android:layout_alignParentTop="true" 与父控件顶部对齐
android:layout_alignParentBottom="true" 与父控件底部对齐
android:layout_centerHorizontal="true" 在父控件中水平居中
android:layout_centerVertical="true" 在父控件中垂直居中
android_layout_centerInParent="true" 在父控件中中部居中


##### AbsoluteLayout(绝对布局)
绝对布局,子控件的位置以绝对的位置定位,子控件之间可以重叠,相对于其他布局,缺少灵活性,在最新的android版本中已经不建议使用。


##### 总结
在android布局控制中,最常用的是线性布局和相对布局,往往它们通常是配合使用,也就是嵌套使用。


##### 关于layout_gravity与gravity的区别
从名字上可以看到,android:gravity是对元素本身说的,元素本身的文本显示在什么地方靠着换个属性设置,不过不设置默认是在左侧的。


android:layout_gravity是相对与它的父元素说的,说明元素显示在父元素的什么位置。


比如说button: android:layout_gravity 表示按钮在界面上的位置。 android:gravity表示button上的字在button上的位置。


#### ComponentUI之核心控件


##### 文本框与编辑框
android中提供了两种文本组件:一种是文本框(TextView),用于在屏幕上显示文本;另外一种是编辑框(EditText),用于在屏幕上显示可编辑的文本框。EditText是TextView的子类,所以,很多EditView上的属性在TextView上也适用。


##### 文本框
标签是文本控件,用于文字显示的控件,常用的属性也有id,text,textSize,layout_width以及lay_height属性等,同时,该控件也可以用作间隔控件与控件间距的作用。
layout_weight:设置该控件占父控件的权重。该属性也同样用于其他控件。
例如:


```xml
    <Button
        android:id="@+id/relativeLO"
        android:text="@string/relative_name"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


    <TextView
        android:layout_weight="4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />




    <Button
        android:id="@+id/absLO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值