android 界面组件,安卓开发学习周第三篇——Android中的UI组件
原标题:安卓开发学习周第三篇——Android中的UI组件
在Android APP中,所有的用户界面元素都是由View和ViewGroup的对象构成的。View是绘制在屏幕上的用户能与之交互的一个对象。而ViewGroup则是一个用于存放其他View(和ViewGroup)对象的布局容器!Android为我们提供了一个View和ViewGroup子类的集合,集合中提供了一些常用的输入控件(比如按钮和文本域)和各种各样的布局模式(比如线性或相对布局)。下面介绍一些相关知识。
1、User Interface Layout
你的APP的用户界面上的每一个组件都是使用View和ViewGroup对象的层次结构来构成的,每个ViewGroup都是要给看不见的用于组织子View的容器,而它的子View可能是输入控件或者在UI上绘制了某块区域的小部件。有了层次树,你就可以根据自己的需要,设计简单或者复杂的布局了(布局越简单性能越好),下图就是一个UI布局的层次结构的插图。
定义你的布局,你可以在代码中实例化View对象并且开始构建你的树,但最容易和最高效的方式来定义你的布局则是使用一个XML文件,用XML来构成布局更加符合人的阅读习惯,而XML类似与HTML 使用XML元素的名称代表一个View。所以< TextView >元素会在你的界面中创建一个TextView控件,而一个< LinearLayout >则会创建一个LinearLayout的容器!
2、Android中的六大布局
分别是:LinearLayout(线性布局),RelativeLayout(相对布局),TableLayout(表格布局) FrameLayout(帧布局),AbsoluteLayout(绝对布局),GridLayout(网格布局)。而对于LinearLayout(线性布局),我们屏幕适配的使用用的比较多的就是LinearLayout的weight(权重属性)。
但是使用LinearLayout的时候也有一个问题,就是当界面比较复杂的时候,需要嵌套多层的 LinearLayout,这样就会降低UI Render的效率(渲染速度),而且如果是listview或者GridView上的 item,效率会更低。但是如果我们使用RelativeLayout的话,可能仅仅需要一层就可以完成了,以父容器或者兄弟组件参考+margin +padding就可以设置组件的显示位置,是比较方便的!当然,也不是绝对的,具体问题具体分析吧!总结就是:尽量使用RelativeLayout + LinearLayout的weight属性搭配使用吧!
对于布局我们就暂时先介绍这两种,同学们感兴趣的可以自学一下其他布局。
3、TextView(文本框),用于显示文本的一个控件。
在开始前,先要介绍下几个单位:
dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用。
sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。
TextView中有下述几个属性:
id:为TextView设置一个组件id,根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行相关属性的设置,又或者使用RelativeLayout时,参考组件用的也是id!
layout_width:组件的宽度,一般写:**wrap_content**或者**match_parent(fill_parent)**,前者是控件显示的内容多大,控件就多大,而后者会填满该控件所在的父容器;当然也可以设置成特定的大小,比如我这里为了显示效果,设置成了200dp。
layout_height:组件的宽度,内容同上。
gravity:设置控件中内容的对齐方向,TextView中是文字,ImageView中是图片等等。
text:设置显示的文本内容,一般我们是把字符串写到string.xml文件中,然后通过@String/xxx取得对应的字符串内容的,这里为了方便我直接就写到""里,不建议这样写!!!
textColor:设置字体颜色,同上,通过colors.xml资源来引用,别直接这样写!
textStyle:设置字体风格,三个可选值:**normal**(无效果),**bold**(加粗),**italic**(斜体)
textSize:字体大小,单位一般是用sp!
background:控件的背景颜色,可以理解为填充整个控件的颜色,可以是图片哦!
4、ImageView(图像视图)
(1)src属性和background属性的区别:
在API文档中我们发现ImageView有两个可以设置图片的属性,分别是:src和background,以下是他们之间的区别。
①background通常指的都是背景,而src指的是内容!!
②当使用src填入图片时,是按照图片大小直接填充,并不会进行拉伸,而使用background填入图片,则是会根据ImageView给定的宽度来进行拉伸。
(2)解决blackground拉伸导致图片变形的方法。
这个适用于动态加载ImageView的,代码也简单,只要在添加View的时候,把大小写死就可以了。
除了动态加载view,更多的时候,我们还是会通过xml布局的方式引入ImageView的 解决方法也不难,就是通过drawable的Bitmap资源文件来完成,然后blackground属性设置为该文件即可!这个xml文件在drawable文件夹下创建,这个文件夹是要自己创建的哦!!
adjustViewBounds设置缩放是否保存原图长宽比
ImageView为我们提供了adjustViewBounds属性,用于设置缩放时是否保持原图长宽比! 单独设置不起作用,需要配合maxWidth和maxHeight属性一起使用!而后面这两个属性 也是需要adjustViewBounds为true才会生效的。
android:maxHeight:设置ImageView的最大高度。
android:maxWidth:设置ImageView的最大宽度。
scaleType设置缩放类型
android:scaleType用于设置显示的图片如何缩放或者移动以适应ImageView的大小 Java代码中可以通过imageView.setScaleType(ImageView.ScaleType.CENTER)来设置。可选值如下:
fitXY:对图像的横向与纵向进行独立缩放,使得该图片完全适应ImageView,但是图片的横纵比可能会发生改变。
fitStart:保持纵横比缩放图片,知道较长的边与Image的编程相等,缩放完成后将图片放在ImageView的左上角。
fitCenter:同上,缩放后放于中间;
fitEnd:同上,缩放后放于右下角;
center:保持原图的大小,显示在ImageView的中心。当原图的size大于ImageView的size,超过部分裁剪处理。
centerCrop:保持横纵比缩放图片,知道完全覆盖ImageView,可能会出现图片的显示不完全
centerInside:保持横纵比缩放图片,直到ImageView能够完全地显示图片。
matrix:默认值,不改变原图的大小,从ImageView的左上角开始绘制原图, 原图超过ImageView的部分作裁剪处理。
第四部分讲解了ImageView(图像视图),内容看上很多,不过都是一些详述性的东西,知道即可。
以上内容就是安卓开发页面设置的一些内容。返回搜狐,查看更多
责任编辑:
android 界面组件,安卓开发学习周第三篇——Android中的UI组件相关推荐
- 安卓开发学习日记第三天_新手怪button_莫韵乐的欢乐笔记
安卓开发学习日记第三天--新手怪button (不是buttercup,虽然里面好像也有button,心中已经响起那段音乐了) 前情提要: 第一天学习日记之安装Android Studio3.6 第二 ...
- 安卓开发学习之002 LinearLayout之android:layout_gravity详解
1.使用说明 这个是针对控件本身而言,用来控制该控件在包含该控件的父控件中的位置.同样,当我们在Button按钮控件中设置android:layout_gravity="left" ...
- js调android方法失败,安卓开发学习之解决JS不能调用Android方法
背景 这两天在做划词搜索时,需要让前端的js调用后端的Android方法,但总是调不成,经过搜索,问题解决,现记录成文. 解决方案 1.确定调用了webView.addJavascriptInterf ...
- Eclipse+ADT+Android SDK 搭建安卓开发环境
2019独角兽企业重金招聘Python工程师标准>>> Eclipse+ADT+Android SDK 搭建安卓开发环境 博客分类: Android 最近刚开始接触Android(安 ...
- 安卓开发学习日记第一天(笑)_Android Studio3.6安装_莫韵乐的快乐笔记
安卓开发学习第一天 Android Studio3.6安装 没想到终于要写出自己的第一个博客了 反正是第一篇,有没有人看都无所谓(理智:129/129) 万事开头难,做下去就容易很多了 言归正传 工欲 ...
- 安卓开发学习日记第五天——奇怪的bug出现了(VT-x说没就没)_莫韵乐的欢乐日记
安卓开发学习日记第五天--奇怪的bug出现了(VT-x说没就没) 前情提要: 安卓开发学习日记第一天_Android Studio3.6安装 安卓开发学习日记第二天_破坏陷阱卡之sync的坑 安卓开发 ...
- 安卓开发学习日记第四天_会爬就会跑_莫韵乐的欢乐笔记
安卓开发学习日记第四天_会爬就会跑 前情提要 安卓开发学习日记第一天Android Studio3.6安装 安卓开发学习日记第二天_破坏陷阱卡之sync的坑 安卓开发学习日记第三天_新手怪button ...
- 安卓开发学习日记第四天番外篇_用Kotlin炒冷饭——越炒越小_莫韵乐的欢乐笔记
安卓开发学习日记第四天番外篇--用Kotlin炒冷饭--越炒越小 前情提要 安卓开发学习日记第一天_Android Studio3.6安装 安卓开发学习日记第二天_破坏陷阱卡之sync的坑 安卓开发学 ...
- 安卓开发学习日记第二天_破坏陷阱卡之sync的坑_莫韵乐的快乐笔记
安卓开发学习日记第二天 前情提要:第一天的日记 经过第一天的日记,我们顺利第安装上了Android Studio3.6 第二天内容包括: 1.推荐的文件目录结构 2.如何创建一个项目 3.遇到sync ...
最新文章
- 艾伟_转载:C#语言基础常见问题汇总
- 大神的xml解析之路
- YJango的循环神经网络——实现LSTM YJango的循环神经网络——实现LSTM YJango YJango 7 个月前 介绍 描述最常用的RNN实现方式:Long-Short Term Me
- 图形化安装配置:安装oracle、新建数据库、用plsql连接oracle,套路明白了其实挺简单...
- Hepatology | 朱黎琴/于吉洋团队合作揭示新生儿肝脏发育中肝母细胞瘤转移的新机制...
- 反爬虫策略之----UserAgent设置与随机生成
- 7-3 计算平均成绩 (15分)
- python入门指南by许半仙百度云-《江火欲燃山》《这题超纲了》《Python入门指南》...
- 2021级新生个人训练赛第38场
- 【VB-01】离线语音模块,无需语音算法开发,直接嵌入式用。
- 计算机四级网络工程师真题答案解析,计算机四级网络工程师历年真题及答案
- 又学到了一个重要的公式,点到直线的距离,欧耶,为自己鼓掌
- 浙江省招高校招生职业计算机技术学校,2021年浙江高校招生职业技能考试时间...
- 小甲鱼第十九课:函数:我的地盘听我的课后总结
- js的scroll事件
- [Style Transfer]——Joint Bilateral Learning for Real-time Universal Photorealistic Style Transfer
- 基于微信电影院购票小程序系统设计与实现 开题报告
- 新增大论坛WPS Office
- php的四种值输出方式
- 计算机科学Computer Science留学论文辅导选题推荐
热门文章
- [转载] python中的数组类型及特点
- win10 iot core java_Windows 10 IoT Core 正式版初体验
- 度量计算机外部传输单位,用来度量计算机外部设备传输率的是什么度量单位?...
- i2c-toos 交互数据_什么是CD-i(交互式光盘)?
- 程序员进阶之路—如何独当一面
- PyCharm PyQt5创建主窗口源代码
- C语言实现AES加密解密
- 面试题:MySQL的innodb和myisam
- linux更新命令centos,CentOS 7.0命令更新新版特性
- 如何在命令中授权给MySQL_MySQL如何使用授权命令grant