安卓的用户界面都是由View以及ViewGroup的子类对象组成的。View对象一般是想button或者textview这样的控件,ViewGroup对象是一个看不见的View容器,它定义了如何布局容器中装入的子View,比如是网格布局还是垂直布局等。

android提供了通过xml文件编写的方式来操作这些View和ViewGroup,所以尽管View和ViewGroup比较复杂,但是我们其实多数时候是在xml中操作他们的,难易程度就跟网页设计差不多。

本文将会指导你建立一个包含了文本编辑框和按钮的xml布局。后续的教程中,我们会为为按钮增加点击的响应事件。

创建一个LinearLayout

打开 res/layout/目录下的activity_main.xml文件。

注意:在eclispe下,默认打开一个xml文件显示的是xml文件的预览效果,而不是代码。本文是直接在xml代码里面操作,因此你需要点击一下底部的tab菜单中的 activity_main.xml,这样才可以编辑xml。

你创建的BlankActivity 工程模版其实是已经有了一个默认的布局的,但是他是相对布局,由RelativeLayout 包含一个文本显示框TextView 组成。

我们要将其改成线性布局。

首先删除TextView元素,同时将RelativeLayout替换成LinearLayout,然后增加android:orientation属性并设置成horizontal(水平)。

完成上面的步骤之后activity_main.xml应该是这样的:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal" >

LinearLayout 是一个ViewGroup(即ViewGroup的子类),LinearLayout 中的子元素要么是单一的横向排列,要么是垂直排列,这取决于其android:orientation属性。子元素排列的先后顺序跟xml文件中出现的顺序是一致的。 android:layout_width 和 android:layout_height这两个属性是所有视图组件都需要的属性,缺少其中任何一个在运行代码的时候都会报错。这两个属性决定了该View的大小。

因为在activity_main.xml文件中LinearLayout是是最顶层的View,所以我们要将app界面充满整个屏幕的话应该将layout_width 和layout_height设置成"match_parent",顾名思义,match_parent就是充满父View的整个空间,而所有app的顶级View都是充满屏幕的。(新版本都是用match_parent,也可以用fill_parent来代替,但是官方不推荐这么写)。

关于 layout的其他属性,请参考谷歌官方文档。

添加一个文本编辑框

在xml中创建一个文本编辑框控件是用标签,就跟其他的控件一样,你需要为它增加必要的属性设置。如下:

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:hint="@string/edit_message" />

关于这些属性的解释:

android:id

id是一个view的唯一标识,通过id,你可以在代码中引用这些视图对象,读取或者修改他们。当我们在xml中引用资源文件的时候,必须要加上@符号。@符号紧跟着的是资源的类型(这里资源类型就是id)然后是"/"分隔符,最后是资源名称。所以android:id="@+id/edit_message"的意思就是引用一个名字叫edit_messag的id类型资源。

注意这里的id之前有一个+号。当我们第一次定义一个资源文件id的时候需要+,在编译app的时候,会在我们的 gen/R.java文件中生成一个资源文件id,id一旦被定义之后,其他队该id的引用都不再需要+号了。

android:layout_width 和 android:layout_height与直接给这两个属性赋具体的值不同,"wrap_content"表示该view占据的空间大小取决于自身。如果值为"match_parent",那么view的大小将充满其父容器。

android:hint

这个属性设置了文本输入框EditText在没有任何文字的时候显示给用户的默认值。hint属性的值在这里并没有直接给出,而是通过对资源文件string的引用来获得字符串。当我们的资源文件中还没有定义名叫edit_message的字符串的时候,直接编译是会报错的。下面我将会教你如何添加string资源文件。

添加字符串String资源文件

如果你想在用户界面中添加字符串,你应该将该字符串放在专门的资源文件中。这样做的好处是,当你需要修改UI中涉及到的字符串时,你只需修改一个文件就可以了,而不必在复杂的代码中寻找。而且,将字符串分离出来的好处是这样更容易实现对多语言的支持。默认情况下,你新建一个工程总是会产生res/values目录,目录下有strings.xml文件。打开该文件,添加一个name为“edit_message”,value值为"Enter a message."的字符串。因为我们稍后会在button上显示send一词,因此顺便我们再添加一个name为“button_send”,value值为"Send"的字符串。代码如下:<?xml version="1.0" encoding="utf-8"?>

My First App

Enter a message

Send

Settings

MainActivity

至于对多种语言的支持方法,可以参考google官方其他文章。

添加一个按钮

上面我们在LinearLayout中添加了一个文本输入框EditText,紧接着我们通过如下代码在EditText的后面添加一个按钮:

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/button_send" />

由于在activity中并没有引用button的地方,所以我们这里没有添加id属性。layout_width 和layout_height属性设置成wrap_content意味着按钮的大小取决于自身的内容。

将文本编辑框的宽度设置成适合屏幕的宽度

到现在为止,EditText 和Button的大小都是wrap_content,也就是自身有多大,就显示多大。如图

这种设置对于button来说很合适,但是并不适合editText控件,因为editText是用来输入文字的,editText的自身内容是可变的,wrap_content只能保证其大小适应了最初该有的大小,当输入文字更长的时候,editText就满足不了了,所以最好还是设置成最大限度的充满屏幕的效果(除button外的剩余部分)。在LinearLayout中,我们可以通过weight权重来做到,也就是 android:layout_weight属性。

android:layout_weight就是决定如何分配剩余空间。举个例子,如果你给一个view的layout_weight设为2,另外一个View的的layout_weight设为1,那么剩余的空间就被划分成了三分,第一个View占两份,也就是2/3.

默认所有View的layout_weight都为0,因此如果你只给某个View设置了layout_weight大于0的值,那么他将得到所有视图在分配完空间之后的全部剩余空间。所以这里我将EditText的layout_weight设为1,而按钮保持默认的状态。

android:layout_weight="1"

... />

注意:虽然在这种情况下,一般我们是将editText的宽度设为0,

android:layout_width="0dp"

为什么要这么做呢?其实是效率方面的考虑,如果使用"wrap_content",系统会先计算editText所需的空间,然后得出editText和button占据后还剩余多少空间,如果还有剩余,则将剩余宽度补给editText。如果我设置为0,editText部分的空间就不需要计算了。所以你应该这样写代码:

android:layout_weight="1"

android:layout_width="0dp"

... />

修改了之后那么将会是如下效果:

整个布局文件的代码:<?xml version="1.0" encoding="utf-8"?>

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

android:layout_weight="1"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:hint="@string/edit_message" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/button_send" />

运行代码就能看到效果了。

android的一个app代码怎么写,编写一个简单的安卓app界面相关推荐

  1. js php 手机验证码代码怎么写,JS实现简单短信验证码界面

    1.要实现短信验证码界面,首先要有一个文本框,旁边是按钮,点击时开始倒计时. 2.先创建文本框和按钮,按钮设置对应的id,然后在js中通过id获取按钮这个元素,对其执行操作.同时应设置倒计时时间以及计 ...

  2. Java黑皮书课后题第8章:*8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积。编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积

    *8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积.编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积 题目 题目描述与运行示例 破题 代码 题目 题目描述 ...

  3. Java黑皮书课后题第4章:*4.17(一个月的天数)编写一个程序,提示用户输入一个年份和一个月份名称的前3个字母(第一个字母使用大写形式),显示该月中的天数。如果月份非法则显示出错信息

    *4.17(一个月的天数)编写一个程序,提示用户输入一个年份和一个月份名称的前3个字母(第一个字母使用大写形式),显示该月中的天数.如果月份非法则显示出错信息 题目 题目概述 破题 运行示例 代码 题 ...

  4. 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转

    有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度. 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转 ...

  5. 12.15有一种数叫回文数,正读和反读都一样,如12321便是一个回文数。编写一个程序,从命令行得到一个整数,判断该数是不是回文数

    有一种数叫回文数,正读和反读都一样,如12321便是一个回文数.编写一个程序,从命令行得到一个整数,判断该数是不是回文数 package Text6;import java.util.Scanner; ...

  6. 有一种数叫回文数,正读和反读都一样,如12321便是一个回文数。编写一个程序,从命令行得到一个整数,判断该数是不是回文数。

    package task08;import java.util.Scanner;/** 8.有一种数叫回文数,正读和反读都一样,如12321便是一个回文数.* 编写一个程序,从命令行得到一个整数,判断 ...

  7. 跟我一起编辑直播源码,直播app代码怎么写

    直播行业现在是越发的火热,人们对于视频直播的热情也是久盛不衰,云豹直播的技术人员在这里就教大家编写一个小小的视频直播片段. Windows Media Player 系列(不同面板样式) 综合型: i ...

  8. python 打印自己代码_如何编写一个打印自身源代码的程序

    一个程序,在没有任何外部输入的情况下,打印自身的源代码,这类程序在英文里有一个专门的称呼,叫做Quine,之所以叫这个名字,是为了纪念美国哲学家及逻辑学家Willard Van Orman Quine ...

  9. 简单的安卓app小程序代码_开发一款APP大概需要多少钱?

    伴随着近几年移动互联网的飞速发展和智能手机的普及,为了更好地进行品牌营销和线上交易,越来越多的企业想要开发属于本身的手机app,所有企业在开发APP之前最关心的题目就是"开发一款手机APP到 ...

最新文章

  1. volatile超详细讲解
  2. mantis1.18升级1.2X方法
  3. 每天坚持不懈的写软文,得到的几点心得感悟
  4. 故障码123401_电力系统规划设计对电力工程设计的应用
  5. 程序大佬和菜鸟的区别,太准确了!
  6. P4127 [AHOI2009]同类分布(数位dp)
  7. python安全攻防---信息收集---whois查询
  8. gcc的警告提示信息
  9. 美国进步派民主党众议员寻求大幅扩大拜登第二项支出计划规模
  10. 《必玩》!学习大师们的游戏设计经验,激发你的游戏创造力!
  11. unity read files 从ini文件
  12. 发现一本好书--《Windows用户态程序高效排错 》
  13. 用HTML实现旋转魔方!很有意思
  14. 无胁科技-TVD每日漏洞情报-2022-7-12
  15. 家用计算机设置网络,教您电脑如何设置宽带连接
  16. 互联网赚钱:一个抖音小项目,分析下,人人都能做
  17. python教你如何把自己的微信变成机器人
  18. 工业相机(面阵和线阵)和镜头选型
  19. Android 实现人脸识别
  20. 国家信息分类和编码标准

热门文章

  1. 数据库的关系表:一对多、多对多实例
  2. 简单粗暴的分页器组件(4个参数两个方法即可实现翻页)
  3. java中list方法addall怎么写_Java ArrayList addAll() 方法
  4. 2020-12-09-商城,记录每天学了什么
  5. 简单 Python 快乐之旅之:Python 基础语法之文件操作专题
  6. 计算机中agp显卡的原理,AGP显卡
  7. 病毒营销的三个经典案例(转)
  8. 微信APP下单API【V3版本】
  9. 【纪中集训2019.3.25】芬威克树
  10. 摸头杀,忍の摸头之术源码