Android 基础入门教程

660课时
526学过
8分

2. 基本 UI 控件

View与ViewGroup的概念

LinearLayout(线性布局)

weight(权重)属性详解

为LinearLayout设置分割线

LinearLayout的简单例子

LinearLayout注意事项

RelativeLayout(相对布局)

TableLayout(表格布局)

如何确定行数与列数

TableLayout三个常用属性

TableLayout使用实例

FrameLayout(帧布局)

FrameLayout常用属性

FrameLayout实例演示1

FrameLayout实例演示2

FrameLayout实例演示3

GridLayout(网格布局)

GridLayout使用实例

GridLayout用法归纳

AbsoluteLayout(绝对布局)

AbsoluteLayout使用示例

TextView(文本框)

TextView基础属性详解

TextView实例演示1

TextView实例演示2

TextView实例演示3

使用autoLink属性识别链接类型

TextView玩转HTML

SpannableString&SpannableStringBuilder定制文本

设置TextView字间距和行间距

TextView自动换行

EditText(输入框)

EditText设置默认提示文本

获得焦点后全选组件内所有文本内容

限制EditText输入类型

设置最小行、最多行和单行等

设置文字间隔和英文字母大写类型

控制EditText距离

设置EditText获得焦点

EditText光标位置的控制

带表情的EditText的简单实现

带删除按钮的EditText

Button(按钮)与ImageButton(图像按钮)

StateListDrawable简介

实现按钮的按下效果

使用颜色值绘制圆角按钮

实现Material Design水波效果的Button

ImageView(图像视图)

src属性和background属性的区别

adjustViewBounds设置缩放是否保存原图长宽比

scaleType设置缩放类型

最简单的绘制圆形的ImageView

RadioButton(单选按钮)&Checkbox(复选框)

RadioButton基本用法与事件处理

CheckBox基本用法与事件处理

自定义点击效果

改变文字与选择框的相对位置

修改文字与选择框的距离

开关按钮ToggleButton和开关Switch

ToggleButton核心属性讲解

Switch核心属性讲解

ToggleButton和Switch使用示例

ProgressBar(进度条)

ProgressBar常用属性讲解与基础实例

使用动画来替代圆形进度条

自定义圆形进度条

SeekBar(拖动条)

SeekBar基本用法

简单SeekBar定制

RatingBar(星级评分条)

RatingBar基本使用

RatingBar定制环节

ScrollView(滚动条)

Date & Time组件(上)

TextClock(文本时钟)

AnalogClock(模拟时钟)

Chronometer(计时器)

Date & Time组件(下)

DatePicker(日期选择器)

TimePicker(时间选择器)

CalendarView(日历视图)

Adapter基础讲解

MVC模式的简单理解

Adapter概念解析

Adapter代码示例

ListView简单使用

BaseAdapter优化

ListView的焦点问题

ListView之checkbox错位问题解决

ListView的数据更新问题

构建一个可复用的自定义BaseAdapter

ListView Item多布局的实现

GridView(网格视图)的基本使用

Spinner(列表选项框)的基本使用

AutoCompleteTextView(自动完成文本框)的基本使用

ExpandableListView(可折叠列表)的基本使用

ViewFlipper(翻转视图)的基本使用

Toast(吐司)的基本使用

Notification(状态栏通知)详解

AlertDialog(对话框)详解

其他几种常用对话框基本使用

PopupWindow(悬浮框)的基本使用

菜单(Menu)

ViewPager的简单使用

DrawerLayout(官方侧滑菜单)的简单使用

4. 四大控件

Activity初学乍练

Activity的概念与Activity的生命周期图

Activity/ActionBarActivity/AppCompatActivity的区别

Activity的创建流程

onCreate()一个参数和两个参数的区别

启动一个Activity的几种方式

横竖屏切换与状态保存的问题

系统给我们提供的常见的Activity

Activity初窥门径

Activity间的数据传递

多个Activity间的交互(后一个传回给前一个)

知晓当前是哪个Activity

随时关闭所有Activity

完全退出App的方法

双击退出程序的两种方法

为Activity设置过场动画

Bundle传递数据的限制

使用命令行查看当前所有Activity的命令

设置Activity全屏的方法

onWindowFocusChanged方法妙用

定义对话框风格的Activity

Activity登堂入室

Activity,Task和Back Stack的一些概念

Task的管理

Activity的四种加载模式详解

Activity拾遗

Service初涉

线程的相关概念

Service与Thread线程的区别

Service的生命周期图

生命周期解析

生命周期验证

Service进阶

IntentService的使用

Activity与Service通信

一个简单前台服务的实现

简单定时后台线程的实现

Service精通

IBinder和Binder是什么?

Binder机制浅析

为何Android使用Binder机制来实现进程间的通信?

AIDL是什么?

AIDL实现两个进程间的简单通信

AIDL实现两个进程间的简单通信-服务端

AIDL实现两个进程间的简单通信-客户端

传递复杂数据的AIDL Service

直接通过Binder的onTransact完成跨进程通信

Android 5.0后Service一些要注意的地方

BroadcastReceiver牛刀小试

BroadcastReceiver是什么?

两种广播类型

接收系统广播

发送广播

BroadcastReceiver庖丁解牛

本地广播

Android 4.3以上版本监听开机启动广播的问题解决

常用的系统广播总结

ContentProvider初探

ContentProvider概念讲解

使用系统提供的ContentProvider

自定义ContentProvider

通过ContentObserver监听ContentProvider的数据变化

ContentProvider再探:Document Provider

简单走下文档

Android 4.4 获取资源路径问题

Intent的基本使用

显式Intent与隐式Intent的区别

Intent的七个属性

显式Intent使用示例

隐式Intent详解

常用系统Intent合集

Action在哪里查?

Intent之复杂数据的传递

Intent传递简单数据

Intent传递数组

Intent传递集合

Intent传递对象

Intent传递Bitmap

定义全局数据

单例模式传参

7. 网络编程

Android网络编程要学的东西与Http协议学习

Android与互联网交互的三种方式

初识Http协议

什么是Http协议?

Http 1.0 与 Http 1.1的区别

Http协议的底层工作流程

Http协议的业务流程

Http的几种请求方式

Get和Post的对比

Http状态码合集

Http协议的特点

Android Http请求头与响应头

HTTP请求之消息头

HTTP响应之响应头

代码验证响应头的作用

Android HTTP请求方式:HttpURLConnection

HttpURLConnection的介绍

HttpURLConnection的使用步骤

HttpURLConnection使用示例

Cookie问题的处理

使用HttpURLConnection发送PUT请求

Android HTTP请求方式:HttpClient

HttpClient使用流程

HttpClient使用示例

HttpClient抓数据示例

使用HttpPut发送Put请求

Android XML数据解析

XML数据要点介绍

三种解析XML方法的比较

SAX解析XML数据

DOM解析XML数据

PULL解析XML数据

参考代码下载

Android JSON数据解析

Json是什么?

Json与XML的比较

Json的格式规范

Android给我们提供的Json解析类

Json字符串解析示例1

Json字符串解析示例2

Android 文件上传

项目用到的图片上传的关键方法

使用HttpConnection上传文件

Android 文件下载(1)

普通单线程下载文件

普通多线程下载

使用DownloadManager更新应用并覆盖安装

示例代码下载

Android 文件下载(2)

Android多线程断点下载的代码流程解析

Step 1:创建一个用来记录线程下载信息的表

Step 2:创建一个数据库操作类

Step 3:创建一个文件下载器类

Step 4:自定义一个下载线程类

Step 5:创建一个DownloadProgressListener接口监听下载进度

Step 6:编写我们的布局代码

Step 7:MainActivity的编写

Step 8:AndroidManifest.xml文件中添加相关权限

参考代码下载

Android 调用 WebService

WebService简介

去哪里获取WebService服务

第三方jar包的准备

获取相关的一些参数

注册并启用相关WEB服务

调用WebService的代码示例

参考代码下载

WebView(网页视图)基本用法

什么是WebView?

WebView相关方法

WebView常见需求1:根据URL加载网页

WebView常见需求2:滚动事件的监听

WebView常见需求3:滚动条的问题

WebView常见需求4:设置缩放以及自适应屏幕

WebView常见需求5:获取WebView的Cookie数据

WebView常见需求6:设置WebView的Cookie数据

示例代码下载

WebView和JavaScrip交互基础

核心步骤讲解

HTML通过JS显示Toast与普通列表的对话框

HTML通过JS调用三种不同的对话框

HTML通过JS读取Android联系人并显示

示例代码下载

Android 4.4后WebView的一些注意事项

多线程

线程阻塞

evaluateJavascript() 方法

处理WebView中url的跳转

UserAgent变化

使用addJavascriptInterface()的注意事项

Remote Debugging

N5读取联系人的问题解决

WebView文件下载

调用其它浏览器下载文件

自己写线程下载文件

WebView缓存问题

缓存的分类

为WebView开启缓存功能

删除WebView的缓存数据

示例代码下载

WebView处理网页返回的错误码信息

页面错误,加载自定义网页

页面错误,显示相应的View

示例代码下载

Socket学习网络基础准备

OSI七层网络模型浅析

TCP/IP四层模型

TCP/UDP区别讲解

Java中对于网络提供的几个关键类

基于TCP协议的Socket通信(1)

什么是Socket?

Socket通信模型

Socket服务端的编写

Socket客户端的编写

增强版案例:小猪简易聊天室

基于TCP协议的Socket通信(2)

运行效果图

实现流程图

代码示例

示例代码下载

基于UDP协议的Socket通信

服务端实现步骤

客户端实现步骤

8. 绘画与动画

Android中的13种Drawable小结 Part 1

Drawable资源使用注意事项

ColorDrawable

NiewPatchDrawable

ShapeDrawable

GradientDrawable

Android中的13种Drawable小结 Part 2

BitmapDrawable

InsetDrawable

ClipDrawable

RotateDrawable

AnimationDrawable

Android中的13种Drawable小结 Part 3

LayerDrawable

TransitionDrawable

LevelListDrawable

StateListDrawable

Bitmap(位图)全解析 Part 1

了解Bitmap,BitmapFactory,BitmapFacotry.Options

Bitmap常用方法

获取Bitmap位图

获取Bitmap的相关信息

抠图片上的某一角下来

使用Bitmap进行截屏

Bitmap引起的OOM问题

什么是OOM?为什么会引起OOM?

避免Bitmap引起的OOM技巧小结

及时回收图像

其他方法

三个绘图工具类详解

Paint(画笔)

Canvas(画布)

Path(路径)

动手试试

绘图类实战示例

Paint API之MaskFilter(面具)

BlurMaskFilter(模糊效果)

EmbossMaskFilter(浮雕效果)

注意事项

示例代码下载

Paint API之 Xfermode与PorterDuff详解(一)

AvoidXfermode

PixelXorXfermode

示例代码下载

Paint API之Xfermode与PorterDuff详解(二)

写个例子来验证前面的这个图

示例代码下载

Paint API之Xfermode与PorterDuff详解(三)

实现流程分析

代码实现

示例代码下载

Paint API之Xfermode与PorterDuff详解(四)

要实现的效果图以及实现流程分析

代码实现

示例代码下载

Paint API之ColorFilter(颜色过滤器)(1/3)

相关常识的普及

ColorMatrix的解读

写代码来验证ColorMatrix所起的作用

使用ColorMatrix的三个方法处理图像

示例代码下载

Paint API之ColorFilter(颜色过滤器)(2/3)

代码示例

示例代码下载

Paint API之ColorFilter(颜色过滤器)(3/3)

测试代码示例

示例代码下载

Paint API之PathEffect(路径效果)

子类作用与构造方法参数分析

写代码来验证各自的效果

示例代码下载

Paint API之Shader(图像渲染)

使用代码示例

示例代码下载

Paint几个枚举/常量值以及ShadowLayer阴影效果

get枚举用法

Paint.Style

Paint.Cap

Paint.Join

Paint.Align

Paint.FontMetrics和Paint.FontMetricsInt

ShadowLayer设置阴影效果

Paint API之Typeface(字型)

字体的可选风格

可选字体对象(Typeface)

自定义创建字型

使用代码示例

示例代码下载

Canvas API详解(Part 1)

translate(平移)

rotate(旋转)

scale(缩放)

skew(倾斜)

Canvas图层的概念以及save()和restore()详解

saveLayer()与restoreToCount()讲解

示例代码下载

Canvas API详解(Part 2)剪切方法合集

Region.Op组合方式详解

Region.Op使用实例

clipRect方法详解

clipPath方法详解

示例代码下载

Canvas API详解(Part 3)Matrix和drawBitmapMesh

Matrix中的几个常用的变换方法

Matrix使用示例

drawBitmapMesh扭曲图像

示例代码下载

Android动画合集之帧动画

帧动画概念以及用法

使用示例1

使用示例2

示例代码下载

Android动画合集之补间动画

补间动画的分类和Interpolator

各种动画的详细讲解

写个例子来体验下

动画状态的监听

为View动态设置动画效果

为Fragment设置过渡动画

为Activity设置过场动画

进入APP后登陆注册按钮从底部弹出动画效果

示例代码下载

Android动画合集之属性动画-初见

属性动画概念

ValueAnimator简单使用

ObjectAnimator简单使用

组合动画与AnimatorListener

使用XML来编写动画

示例代码下载

Android动画合集之属性动画-又见

Evaluator介绍

Evaluator使用示例

Evaluator示例增强版

Interpolator(补间器)

Interpolator的内部实现机制

自定义Interpolator

ViewPropertyAnimator

示例代码下载

10. 系统服务

TelephonyManager(电话管理器)

获得TelephonyManager的服务对象

调用拨号器拨打电话号码

获取Sim卡信息与网络信息

获取手机的信号强度

监听手机的所有来电

黑名单来电自动挂断

示例代码下载

SmsManager(短信管理器)

调用系统发送短信功能

调用系统提供的短信接口发送短信

AudioManager(音频管理器)

获得AudioManager对象实例

相关方法详解

使用示例

Vibrator(振动器)

获得Vibrator实例

可以使用的相关方法

使用示例:设置频率不同的震动器

示例代码下载

AlarmManager(闹钟服务)

Timer类与AlarmManager类区别

获得AlarmManager实例对象

相关方法讲解

使用示例:一个简单的定时任务

代码示例下载

PowerManager(电源服务)

PowerManager是什么

wakelock锁介绍

PowerManager怎么用

需要的权限

WindowManager(窗口管理服务)

WindowManager介绍

如何获得WindowManager实例

WindowManager使用实例1

WindowManager使用实例2

WindowManager使用实例3

WindowManager使用实例4

代码示例下载

LayoutInflater(布局服务)

Layout是什么?

LayoutInflater的用法

纯Java代码加载布局

纯Java代码加载布局的流程

Java代码动态添加控件或xml布局

LayoutInflater的inflate()方法源码

WallpaperManager(壁纸管理器)

WallpaperManager的基本用法

调用系统自带的壁纸选择功能

将Activity的背景设置为壁纸背景

定时换壁纸的Demo

示例代码下载

传感器专题1:相关介绍

如何查看自己手机所支持的传感器有哪些?

Sensor传感器相关的方法以及使用套路

示例代码下载

传感器专题2:方向传感器

三维坐标系的概念

方向传感器的三个值

简单的Demo帮助我们理解三个值的变化

一个简易版的文字指南针示例

示例代码下载

传感器专题3:加速度/陀螺仪传感器

加速度传感器(Accelerometer sensor)

简易计步器的实现

陀螺仪传感器(Gyroscope sensor)

示例代码下载

传感器专题4:其他传感器了解

磁场传感器(Magnetic field sensor)

距离传感器(Proximity sensor)

光线传感器(Light sensor)

气压传感器(Pressure sensor)

温度传感器(Temperature sensor)

传感器模拟工具:SensorSimulator

Android GPS初涉

定位相关的一些API

获取LocationProvider的例子

判断GPS是否打开以及打开GPS的两种方式

动态获取位置信息

临近警告(地理围栏)

示例代码下载

课程评价 (0)

请对课程作出评价:
0/300

学员评价

暂无精选评价
10分钟

src属性和background属性的区别

在API文档中我们发现ImageView有两个可以设置图片的属性,分别是:src和background 常识: ①background通常指的都是背景,而src指的是内容!! ②当使用src填入图片时,是按照图片大小直接填充,并不会进行拉伸 而使用background填入图片,则是会根据ImageView给定的宽度来进行拉伸

1)写代码验证区别:

写个简单的布局测试下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:id="@+id/LinearLayout1"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:orientation="vertical"  
    tools:context="com.jay.example.imageviewdemo.MainActivity" >  
  
    <ImageView  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:background="@drawable/pen" />  
  
    <ImageView  
        android:layout_width="200dp"  
        android:layout_height="wrap_content"  
        android:background="@drawable/pen" />  
  
    <ImageView  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:src="@drawable/pen" />  
  
    <ImageView  
        android:layout_width="200dp"  
        android:layout_height="wrap_content"  
        android:src="@drawable/pen" />  
  
</LinearLayout> 

效果图如下:

结果分析:

宽高都是wrap_content那就一样,是原图大小,但是,当我们固定了宽或者高的话, 差别就显而易见了,blackground完全填充了整个ImageView,而src依旧是那么大, 而且他居中了哦,这就涉及到了ImageView的另一个属性scaleType了! 另外还有一点,这里我们说了只设置width或者height哦!加入我们同时设置了 width和height的话,blackground依旧填充,但是,src的大小可能发生改变哦! 比如,我们测试下下面这段代码:

<ImageView  
        android:layout_width="100dp"  
        android:layout_height="50dp"  
        android:src="@drawable/pen" />

运行效果图:

PS:scaleType下面会讲~

2)解决blackground拉伸导致图片变形的方法

在前面的效果图中的第二个Imageview中我们可以看到图片已经被拉伸变形了, 正方形变成了长方形,对于和我一样有轻微强迫症的人来说,显然是不可接受的, 有没有办法去设置呢?答案肯定是有的,笔者暂时知道的有以下两种方式:

  • 这个适用于动态加载ImageView的,代码也简单,只要在添加View的时候,把大小写写死就可以了 LinearLayout.LayoutParams layoutParam = new LinearLayout.LayoutParams(48, 48); layout.addView(ibtnPen, layoutParam);
  • 除了动态加载view,更多的时候,我们还是会通过xml布局的方式引入ImageView的 解决方法也不难,就是通过drawable的Bitmap资源文件来完成,然后blackground属性设置为该文件即可! 这个xml文件在drawable文件夹下创建,这个文件夹是要自己创建的哦!!

pen_bg.xml:

<bitmap  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:id="@id/pen_bg"  
    android:gravity="top"  
    android:src="@drawable/pen"  
    android:tileMode="disabled" >  
</bitmap>

上述代码并不难理解,估计大家最迷惑的是titleMode属性吧,这个属性是平铺,就是我们windows设置 背景时候的平铺,多个小图标铺满整个屏幕捏!记得了吧!不记得自己可以试试!disabled就是把他给禁止了! 就是上面这串简单的代码,至于调用方法如下: 动态: ibtnPen.setBacklgroundResource(R.drawable.penbg); 静态: android:background = "@drawable/penbg"

3)设置透明度的问题

说完前面两个区别,接着再说下setAlpha属性咯!这个很简单,这个属性,只有src时才是有效果的!!

4)两者结合妙用:

网上的一张图:

一看去是一个简单的GridView,每个item都是一个ImageView,但是细心的你可能发现了, 上面的ICON都不是规则的,而是圆形,圆角矩形等等,于是乎这里用到了src + background了! 要实现上述的效果,你只需要两个操作: 找一张透明的png图片 + 设置一个黑色的背景 (当然你也可以设置png的透明度来实现,不过结果可能和预想的有出入哦!) 我们写个简单例子:

如图,呆萌呆萌的小猪就这样显示到ImageView上了,哈哈,blackground设置了蓝色背景!

实现代码:

<ImageView  
    android:layout_width="150dp"  
    android:layout_height="wrap_content"  
    android:src="@drawable/pig"  
    android:background="#6699FF" /> 

PS: 当然你也可以用selctor实现点击效果,设置不同的情况设置不同的图片,以实现点击或者触摸效果!

5)Java代码中设置blackground和src属性:

前景(对应src属性):setImageDrawable( ); 背景(对应background属性):setBackgroundDrawable( );