Android开发入门之学习笔记(三):程序窗口的布局

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Android应用程序的用户界面可以看作是由View和View Group组成的,从字面意思上就可以看出,View Group是可以包含多个View的。借用官方教程的图可以更容易理解:

说到这里,我们还没有解释,何为View?其实就是我们所看到的按钮、文本编辑框之类的。换句话说,View是一些用户可以看得见的窗口小部件,而ViewGroup则是用户看不见的,它的作用是更好的组织和布局View。

由于我们是初学者,所以可以简单的来归纳一下:

Android应用程序通过 res/layout目录下的一个XML文件(activity_main.xml)来配置和管理程序窗口的布局。当然,一个Android应用程序可能有多个程序窗口,每个程序窗口都会有一个XML文件来管理它的界面布局。每个XML文件的名称可能不一样。我们这里讨论的是最简单的Android程序,它是由ADT自动生成的只有一个程序窗口的程序,所以它的布局文件也只有一个:activity_main.xml。

如果使用ADT工程,自动产生一个最简单的Android应用程序工程,其默认布局的内容大致如下:

<RelativeLayout 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"tools:context=".MainActivity" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="@string/hello_world" /></RelativeLayout>

我们精简一下这个XML文件可能看起来会更容易一些:

<RelativeLayout><TextView/></RelativeLayout>

这个XML文件有两个元素,分别是RelativeLayout和TextView,其中RelativeLayout就是一个ViewGroup,而TextView就是一个View。这个TextView包含在RelativeLayout之中。我们结合着程序在手机上的实际运行效果看:

除了程序上方的标题栏之外,整个程序窗口一片空白,只有中间有一行文字信息:Hello world!。

这种效果就是TextView居中显示在整个屏幕的中央。需要注意的是,TextView是包裹在RelativeLayout之中的。所以,确切的说,应该是这个程序窗口中有一个RelativeLayout,它占据了全部的屏幕,而它里面又包含了一个TextView,这个TextView位于RelativeLayout的中央(即屏幕的中央)。所以最终,我们只看到了一个TextView(它没有边框)。

我们回过头来,再看看activity_main.xml文件。

首先,我们仅看RelativeLayout的属性:

<RelativeLayout 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"tools:context=".MainActivity" >

这五个属性中,我们只看其中最简单的两个(谁让咱是初学者呢,更多的咱也看不懂):android.layout_width和android.layout_height。它们分别指定了RelativeLayout的宽度和高度。它们都使用的是match_parent这个值。查金山词霸可以得知,match_parent的意思是“适应父亲”。其实,就是让RelativeLayout伸展到包含它的上级View的大小。而这个上级View就是这个程序的窗口了(因为RelativeLayout已经是根元素了)。这样,RelativeLayout就占据了当前这个程序屏幕的全部。

再来看看RelativeLayout中包含的那一个TextView,它也有五个属性:

<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="@string/hello_world" />

属性中的android:layout_width和android:layout_height我们已经知道,分别表示的是宽度和高度了。但是,这里使用的值不一样,是wrap_content。还是金山词霸,wrap是包裹、缠绕、盘绕的意思,content是(书的)内容的意思,我们意译就是包裹文字内容,以文字内容为大小,换句话说,TextView里的文本信息占据多大的空间,TextView就多大。

这里我们可以试着把wrap_content换成match_parent,以下是实际效果:

 

初一看,难于理解,为什么Hello world!会出现在左上角?我的分析是,因为我们让TextView扩充到了RelativeLayout的全部大小,这样,其中的文字就只是一部分内容了,那么按照惯例,文字就是居左上对齐的。

android:layout_centerHorizontal和android:layout_centerVertical这两个属性,从字面意思上就可以理解了,一个是水平居中,一个是垂直居中。值的选择,要么是true,要么是false。

这里我做了个试验,不论宽度和高度设置为match_parent还是wrap_content,居中不居中,效果都与上图是一样的,Hello world!居左上角显示。原理稍稍想想就明白了,这里就不再罗嗦了。

最后,讲一个比较重要的属性,这个一次还讲不完,以后还会补充。

TextView有一个属性是android:text="@string/hello_world"。注意,这里是hello_world,两个单词之间是有一个下划线的,不是最终手机屏幕上面显示的那个Hello world!。简单的讲,这里是将TextView要显示的内容定义成了一个字符串,它的名字是hello_world,而TextView真正要显示的是这个字符串的值。那么这个字符串的值又在何处呢?

在res/values目录下有一个strings.xml文件,答案就在这里。

<?xml version="1.0" encoding="utf-8"?>
<resources><string name="app_name">My Temp App</string><string name="hello_world">Hello world!</string><string name="menu_settings">Settings</string></resources>
分析这个文件,在<resources>元素中包含有三个<string>元素,它们都有一个名字,还有一个值。相信大家一看就明白了。我们程序中显示的字符串信息都在这里定义了,包括程序的名字,屏幕上显示的字符串,还有菜单键里显示的菜单名。

既然我们找到了hello_world,那么我们可以简单试验一下,只要修改Hello world!为别的信息就可以了:

<?xml version="1.0" encoding="utf-8"?>
<resources><string name="app_name">My Temp App</string><string name="hello_world">这是我的第一个Android程序!</string><string name="menu_settings">Settings</string></resources>

实际效果如下图所示:

 

OK,这一次笔记就到此吧,这篇博文够长了^0^ 

 

转载于:https://my.oschina.net/allenyao/blog/103374

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c#爬虫-解决ChromeDriver 版本问题

问题Selenium c# 进行爬虫时报错 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 84产生问题的原因因为下载的ChromeDriver版本与本地chrome浏览器的版本不一致导致的。因…

用gradle启动java项目_构建Java项目

#构建Java项目#上一节我们简要介绍了如何编写一个单机的To Do应用&#xff0c;接下来要打包部署成可执行的应用&#xff0c;我们需要编译源代码&#xff0c;生成的class文件需要打包到JAR文件中。JDK提供了javac 和jar工具帮助你实现这些任务&#xff0c;但是你也不想每次源代码…

今天,滴滴被爆亏损109亿,需裁员2000多人,哪些员工会被裁掉?

全世界只有3.14 % 的人关注了数据与算法之美近日&#xff0c;一份滴滴出行内部流传出来的财务数据显示&#xff0c;该公司2018年持续巨额亏损&#xff0c;全年亏损高达109亿元人民币。若消息属实&#xff0c;那将说明&#xff0c;自2012年滴滴成立以来就一直处于亏损状态&#…

限时秒杀┃“探月计划”来袭,美国米德天文望远镜助孩子观月赏月

▲数据汪特别推荐点击上图进入玩酷屋孩子对于未知的世界充满了好奇&#xff0c;尤其是对于月亮&#xff0c;总是有问不完的问题。例如月亮上是怎么样的&#xff1f;怎么很多人说十五的月亮十六圆&#xff1f;月亮有动物吗&#xff1f;不是说有月兔吗&#xff1f;月亮怎么有时是…

话里话外:企业管理软件的方案设计要规避哪些风险

博主推荐延展咨询资深顾问 梁云文章 企业管理软件作为帮助企业管理者优化工作流程&#xff0c;改善管理水平的信息化工具&#xff0c;现如今被大多数的企业接受并在不同层面进行了应用。作为企业管理软件的方案设计者&#xff0c;我们必须从企业管理者、软件操作者的不同视…

java使用zmodem_SecureCRT 中使用zmodem和Linux服务器交换文件

注意&#xff1a;Linux在默认安装的情况下是没有sz和rz这两条指令的&#xff0c;rmp包为&#xff1a;lrzsz-xx.xx-xxx.rpm&#xff0c;用rmp –q lrzsz查看是否安装&#xff0c;没有的话安装&#xff1a;命令&#xff1a;rpm –ivh lrzsz-xx.xx-xxx.rpm安装后查看&#xff1a;1…

每次有人来家里,总有人问我这个积木在哪买的

▲数据汪特别推荐点击上图进入玩酷屋作为一名资深积木达人&#xff0c;小木我可是大大小小的积木阅览无数&#xff0c;当然乐高也不会放过&#xff0c;虽然“钱包君”已经是路人了。&#xff08;每月的工资用来买乐高~&#xff09;之前给大家推荐了一款STEAM积木&#xff0c;小…

NET问答: 为什么时间格式 dd/MM/yyyy 转成 DateTime 会报错?

咨询区 Shantanu Gupta&#xff1a;我在项目中碰到了一个需求&#xff0c;需要将字符串格式的 dd/MM/yyyy 转成 DateTime&#xff0c;比如下面这样&#xff1a;class Program{static void Main(string[] args){var str "22/11/2009";DateTime date DateTime.Parse(s…

Gallery with Video

2019独角兽企业重金招聘Python工程师标准>>> 实现较为完整的图片展示和视频播放功能&#xff08;Image and video gallery&#xff09;&#xff0c;在FGallery-iPhone&#xff08; http://code4app.com/codesample/4f67f4546803fa6d45000001&#xff09;代码的基础上…

实用Python库,这几个你认识不?

近几年Python已成为数据科学行业中大火的编程语言。而作为人工智能核心的机器学习&#xff0c;是一门多领域的交叉学科&#xff0c;专门研究计算机模拟或实现人类学习行为的方法&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改善自身的性能。简…

手把手教你构建WPF官方开源框架源代码

从去年微软就将 WPF 开源了&#xff0c;差不多现在所有 WPF 的源代码都开源了。在学习框架的时候&#xff0c;我会做一些改动&#xff0c;期望能构建一个自己的版本进行测试。但是作为一个特别大的框架&#xff0c;想要构建跑起来可不是直接在 VisualStudio 里面点击一下运行就…

程序员中的明星,超模or女团都是程序媛

全世界只有3.14 % 的人关注了数据与算法之美程序员改变世界已经有几十年的历史了&#xff0c;程序员出名又神秘——出名的是大家都知道程序员有多厉害&#xff0c;神秘的是外界对程序员的认知不够具体&#xff0c;“格子衫、双肩包、木讷、代码、……”程序员的标签有很多&…

php 实现类,php如何实现类

php如何实现类php实现类的方法是&#xff1a;【class 类名{ }】&#xff0c;如【<?php class Student { }】。类是由属性、方法、常量组成的&#xff0c;类名以字母、下划线开头&#xff0c;后面跟字母、数字、下划线。在PHP中实现类和对象(学习视频推荐&#xff1a;java课…

Id都是“とつくとき”这样的怎么爬,在线等,急

一般来说&#xff0c;我们推荐使用整数Id作为数据表的主键&#xff0c;这样可以提供不少好处&#xff1a;存储空间小&#xff0c;简洁易懂&#xff0c;方便分页、排序、索引。但当这种Id暴露到外部时&#xff0c;比如订单号&#xff0c;就存在一定的风险了。因为不管是自增、雪…

舍不得删的12个优质公号

全世界有3.14 % 的人已经关注了数据与算法之美在信息爆炸的时代快节奏的生活里 你是否曾有一瞬间觉得忙碌而空虚&#xff1f;以下12个优质公众号能让你在闲暇的时候不断的提升自我&#xff0c;拓宽视野愿以书卷气&#xff0c;行我路千里近现代史研究通讯ID&#xff1a;jxsdyjtx…

php 实现类,php 获取页面中指定内容的实现类

本文为大家下使用php如何获取页面中的指定内容&#xff0c;而且以封装成类&#xff0c;需要的朋友可以参考下本文功能&#xff1a;1.获取内容中的url&#xff0c;email&#xff0c;image。2.替换内容中的url&#xff0c;email&#xff0c;image。url&#xff1a;xxxemail&#…

FastTunnel-开源内网穿透框架

FastTunnelFastTunnel是用.net core开发的一款跨平台内网穿透工具&#xff0c;它可以实现将内网服务暴露到公网供自己或任何人访问。与其他穿透工具不同的是&#xff1a;FastTunnel项目致力于打造一个易于扩展、易于维护的内网穿透框架&#xff0c;任何人都可以基于该框架二次开…

系统架构师-基础到企业应用架构-服务层

一、上章回顾 上篇我们主要讲解了系统架构中的四种架构模式&#xff0c;并且分析了四种架构模式的实现及应用场景&#xff0c;那么先来回顾下架构中的业务逻辑层的使用及总结。 如果大家对图中讲述的内容不明白或者说是不深入那么可以参考上篇讲 解的内容&#xff1a;系统架构师…

Python 10大谬论

全世界只有3.14 % 的人关注了数据与算法之美谬误 #1: Python 是一门新语言伴随着所有的初创公司正在使用它以及孩子们最近也在学习它的事实&#xff0c;这个谬误为何仍然存在是可以理解的。实际上 Python 已经 超过23岁了, 它最初发布于1991年, 早于 HTTP 1.0协议 5年且早于 Ja…

【litrpa专题】首个rpa程序,使用litrpa采集百度地图地铁数据

RPA最近2年里红遍大江南北&#xff0c;人力成本上升&#xff0c;办公自动化势在必行&#xff0c;Excel长期肩负着办公自动化的重任&#xff0c;就算有【Excel催化剂】这些插件的把持&#xff0c;仍然有许多需求未能满足。笔者一直关注RPA领域&#xff0c;从广义来说&#xff0c…