Android - 组件开发

1WebView

1.1webview简介

webview是作为承载网页的载体控件,提供两个事件回调类:WebViewClient和WebChromeClient

1.2利用webview为网站创建App

1.2.1下载Android Studio并创建一个项目

1.2.2按提示安装依赖并配置

拖拽

why android studio show error of “Missing constraints in constraintlayout”?

1)click on the "Infer constraints" Button

2)添加Base


编码

Android配置文件

访问的url必须是https协议,Android instant apps do not support http websites.

Instant apps就是常说的谷歌小程序。

你关掉网络,打开相应的app,如果显示URL不能打开,则是Hybrid或Web App,否则是Native APP



2ImageView

2.1ImageView

ImageView的src会自动抓取不同分辨率的img1

<LinearLayout>

<ImageView

  android:id="@+id/imageView1"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:src="@drawable/img1"

/>

</LinearLayout>


3Button和ImageButton

3.1另外两个不同的控件

3.2对button的监听方法

1)匿名内部内;

2)外部类;

3)实现接口的方式;


4跑马灯

4.1方法一

android:ellipsize="marquee"

android:focusable="true"

android:focusableInTouchMode="true"

4.2px和dp的区别

由此可以看出使用px作为单位的,在不同的设备中会显示不同的效果。使用dp作为单位的,会根据不同的设备进行转化,适配不同机型。所以建议在长度宽度的数值使用dp作为单位

由此可以看出使用sp作为字体大小单位,会随着系统的字体大小改变,而dp作为单位则不会。所以建议在字体大小的数值要使用sp作为单位

4.3MarqueeTextView控件的几个文件的使用

strings.xml - text

activity_main.xml - relative layout, 布局

MainActivity.java - 主要的交互,操作内容

MarqueeText.jave - 控件本身的java文件

4.4AutoCompleteTextView控件

findViewById

android:completionThreshold="3" //在第3个字符开始匹配

4.5ToggleButton

isChecked()

setOnCheckedChangeListener()


5DropDownMenu

5.1出过的错

5.1.1Emulator: glTexImage2D: got err pre :( 0x502 internal 0x1908 format 0x1908 type 0x1401

Go to Tools > AVD Manager > Virtual device configuration > Show advanced settings > Boot option > Cool boot

Then run again your project with that AVD. Close the session and set again Quick boot in Boot option.

https://stackoverflow.com/questions/50595704/glteximage2d-got-err-pre-0x506-internal-0x1908-format-0x1908-type-0x1401 

5.1.2java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference


5.2其它下拉菜单的解决方案

5.2.1Spinner实现下拉列表

5.2.2PopupWindow

5.3最后的展示

5.4开发步骤

5.4.1基本概念

1) 什么是APP原生开发

APP原生开发就是:html+js,只是这里的html和js都是用java语言写的

什么是context?

Android程序员把“场景”抽象为Context类;

一个应用程序可以认为是一个工作环境,用户在这个环境中会切换到不同的场景;

一个前台秘书,她可能需要接待客人,可能要打印文件,还可能要接听客户电话,而这些就称之为不同的场景(Context),前台秘书可以称之为一个应用程序;

Activity,Service,Broadcast Receiver,Content Provider四大组件;

一句话总结:Context的两个子类分工明确,其中ContextImpl是Context的具体实现类,ContextWrapper是Context的包装类。Activity,Application,Service虽都继承自ContextWrapper(Activity继承自ContextWrapper的子类ContextThemeWrapper),但它们初始化的过程中都会创建ContextImpl对象,由ContextImpl实现Context中的方法。

在应用程序中Context的具体实现子类就是:Activity,Service,Application。那么Context数量=Activity数量+Service数量+1。当然如果你足够细心,可能会有疑问:我们常说四大组件,这里怎么只有Activity,Service持有Context,那Broadcast Receiver,Content Provider呢?Broadcast Receiver,Content Provider并不是Context的子类,他们所持有的Context都是其他地方传过去的,所以并不计入Context总数。上面的关系图也从另外一个侧面告诉我们Context类在整个Android系统中的地位是多么的崇高,因为很显然Activity,Service,Application都是其子类,其地位和作用不言而喻。

作者:尹star 链接:https://www.jianshu.com/p/94e0f9ab3f1d

2)这里R是什么呢?

Android实际上会把res目录下的所有文件都赋予一个整型索引,统一放到R.java文件中。需要引用资源文件时,调用R...就可以引用到这个资源的索引了。

3)AndroidManifest.xml文件是什么?

这里记录了你的app的注册信息和配置信息,包括app所用到的权限,组件(譬如Activity就是Android的四大组件之一)等等都需要在这个文件中一一描述,否则你的app可能会出现无法运行的情况;

4)setContentView(R.layout.activity_main)是干什么的?

是为了把activity_main就和MainActivity关联起来。

5) 开发的思路

首先,定义了2个layout, 它们之间是下划线;

其次,目录的4个文本需要传递,其次4个弹出框也需要传递,最后就是内容区域;从哪里传过来,那就是activity,DropDownMenu.java接收到后再绘制上去;


5.4.2项目架构

所谓MainActivity对应的就是我们app上的一个个可以跳转的页面,而跟activity_main则是与MainActivity关联的布局文件;

5.4.3布局

首先顶部选择的是线性布局LinearLayout,底部选择的是容器布局FrameLayout,遮盖是View控件,而且在内容的view之上,菜单view在最上层(这个菜单view采用下拉菜单容器布局popupMenuViews),所以必须采用FrameLayout布局:

顶层是下拉菜单容器布局popupMenuViews

中间是遮盖层maskView

最底层是contentView

我们知道,应用一般分为两类:1是Web Applications,2是Mobile;

5.4.4绑定事件

就像在WebApp里写一些事件是一样的;


6Android - QQ登录

6.1流程

https://www.imooc.com/video/11787


7RecyclerView

7.1RecyclerView的应用场景:

1)多种样式的列表,RV还都是由列表组成,只是由不同样式的列表组成

2)宫格(网格Grid)和列表(List)同时存在,宫格是一行有几个item(以下例子中间还有一个section),而list的一行只有一个item

3)  分类列表,就是每个分类之间有section(通过ItemDecoration实现)

7.2需要的基础

1) 掌握RecyclerView的基本用法

可以重复利用的View

2) RecyclerView.Adapter的作用:跟ListView.Adapter的作用不同

复写getItemViewType(int position),得到不同位置itemView的type

ItemType保存在Holder中,Holder根据position被缓存在cache中,系统会在cache中拿holder,这样更流畅

需要处理getItemCount(),添加section后,数量的统计肯定是会变的

需要处理onCreateViewHolder和onBindViewHolder (就如同getView()一样是核心中的核心)

实际是根据不同类别得到不同的View,就如ListView中的getView()方法,这里拆成2个来做

3) 怎么拿到RecyclerView的数据

把数据包装进一个Object,然后根据Type去ListObject里取字段,展现不同item

封装RecyclerView.Adapter,把一些不同的item当作header,比如把一堆列表数据上的轮播图当作header

4) RecyclerView.Holder

包装了一个view, ListView保存的是View,而RecyclerView保存的是Holder...Holder保存了Type, position的值

RecyclerView自带Holder,hold一些view的元素;而ListView没有Holder 

5) RecyclerView.Recycler

保存了缓存的机制,类比convertView

上述的holder保存在Recycler的map,从而实现对type, position的缓存

多个RecyclerView公用一个RecycleredPool

6) 和ListView的区别

ListView的type保存在ListView中(以数组的形式保存),而RV的type保存在holder中, RV的缓存单位是Holder而不再是View,缓存的key是Type

7) 总结

看来type很重要,既要根据type缓存getView,又要根据type拿数据adapter


7.3实战

7.3.1添加依赖:implementation'com.android.support:recyclerview-v7:28.0.0'

7.3.2创建ViewHolder

ViewHolder用来保存视图

7.3.3创建多种样式的列表

7.3.4创建网格和列表混排的RV

7.3.5处理各个列表返回不同的字段

比如:列表list1, list2, list3要求返回的数据字段;

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

推荐阅读更多精彩内容