Android官方开发文档Training系列课程中文版:构建第一款安卓应用之创建用户界面

原文地址:http://android.xsoftlab.net/training/basics/firstapp/building-ui.html

在这节课中,你会创建一个xml的布局文件,它包含一个Text成员和一个Button成员。在下节课中,你会学习到当Button按下后启动并发送Text成员的内容到另一个Activity中。

安卓应用的灵活用户界面是建立在View和ViewGroup的层级基础之上。View是比如Button或者TextView这种通用的UI控件,ViewGroup是一种不可见的布局容器,它定义了子View该如何被放置,比如放置在Grid或者垂直的列表中。

布局都是ViewGroup的子类,在这个练习中,我们使用LinearLayout做演示。

创建一个线性布局

  1. 在AS中,打开res/layout目录下的activity_my.xml文件。
    当你在创建这个工程的时候你选择了一个空白的Activity模板,这个工程包含一个activity_my.xml文件,文件中有一个RelativeLayout根View和一个TextView子View。
  2. 在Preview模块下,点击隐藏按钮这里写图片描述来关闭预览模板。
  3. 删除< TextView >元素。
  4. 更改< RelayoutLayout >元素为< LinearLayout >.
  5. 添加 android:orientation 属性然后设置值为”horizontal”;
  6. 移除android:padding属性和tools:context属性。
    res/layout/activity_my.xml
<LinearLayout 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"android:orientation="horizontal" >
</LinearLayout>

LinearLayout是一个ViewGroup,它是ViewGroup的子类,它可以通过属性android:orientation布置子View为垂直排列或者水平排列。每一个LinearLayout的子View都会按照在XML文件中的顺序方式显示在屏幕上。

有两个属性:android:layout_width 和 android:layout_height,对于所有的View的尺寸来说是必须的。

因为LinearLayout是布局的根目录,它应该会填充屏幕的整块区域,因为在宽和高的属性中设置了”match_parent”,这个值表明了这个View应该扩展它的宽或者高到父View的高宽。

添加一个Text属性

正如每一个View对象一样,你必须在XML文件中声明EditText对象的属性。
1. 在activity_my.xml文件的< LinearLayout >的元素中,定义一个< EditText >的元素,并且设置它的id属性为@+id/edit_message。
2. 设置layout_width和layout_height属性为wrap_content。
3. 定义hint属性为一个名称为edit_message的字符串。
< EditText >元素应该是这样的:
res/layout/activity_my.xml

<EditText android:id="@+id/edit_message"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="@string/edit_message" />

以下是你添加的< EditText >的属性介绍:
android:id

  • 这个提供了View的唯一标识符,你可以从应用代码中使用这个对象的引用,比如用来读取并且操作这个对象。
  • 符号@在xml中引用任何资源对象的时候是必须的。紧接着后面跟的是资源的类型,在这里是id,再最后是资源的名称,这里是edit_message。
  • 在资源类型前的符号+是指当你第一次要指定一个资源ID。当你编译APP的时候,SDK工具会使用这个ID的名称在工程的gen/R.java文件中创建一个新的资源ID的引用,这个引用表示的就是XML中的EditText对象。如果使用这种方式声明了ID,那么在后面就不需要再使用+,其它地方引用的时候也不需要+。

android:layout_width 和 android:layout_height

  • 用来指定高宽的尺寸,”wrap_content”是指View应该根据它内容的多少来指定它的大小。如果你想使用 “match_parent”,那么EditText元素将会填充整个屏幕,因为它会扩展到父布局LinearLayout的大小。

android:hint

  • 这个属性用来在Text中内容为空的时候展示,为了不使用硬编码的字符串,这里使用了@string/edit_message的值引用另一个文件中的一个字符串资源。这里不需要使用+标志,然而,因为你还没有指定一个字符串资源,你将会在编译的时候看到错误,你将会在下面定义了字符串资源后修复这个错误。

Note: 这里的字符串资源命名和EditText元素的名称一样,但是,它们属于不同的资源类型,一个是string,一个是id,所以使用相同的名称并无大碍。

添加一个字符串资源

默认情况下,在工程的res/values/下的strings.xml文件便是字符串资源文件了。这里,你将会添加一个名为”edit_message”的字符串然后设置其值为”Enter a message.”
1. 在AS中,在res/values目录下打开string.xml
2. 添加一行名为”edit_message”值为”Enter a message.”的字符串资源
3. 添加一行名为”button_send”值为“Send”的字符串资源。
4. 移除”hello world”那一行。
那么strings.xml应该就是这样的:

<?xml version="1.0" encoding="utf-8"?>
<resources><string name="app_name">My First App</string><string name="edit_message">Enter a message</string><string name="button_send">Send</string><string name="action_settings">Settings</string><string name="title_activity_main">MainActivity</string>
</resources>

在用户界面上的文字,总是要指定每一个资源。字符串资源允许你管理所有的UI文字,它可以使你更轻松的找到和更新文字。外部化存储的字符串资源允许你去简单定义不同的语言版本app

添加一个按钮

  1. 在AS中,打开res/layout下的activity_my.xml文件。
  2. 在< LinearLayout >标签中,< EditText > 元素后面定义一个< Button >.
  3. 设置按钮的高宽为”wrap_content”,所以按钮的高宽就是根据内容的大小来定义的。
  4. 使用android:text属性定义按钮的文本,设置其值为刚刚在string.xml中定义的button_send的字符串资源

你的< LinearLayout >应该看起来像这样:
res/layout/activity_my.xml

<LinearLayout 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"android:orientation="horizontal" ><EditText android:id="@+id/edit_message"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="@string/edit_message" /><Button
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/button_send" />
</LinearLayout>

Note: 这里不需要给Button指定android:id属性,因为这里不需要在Activity代码中使用Button的引用。

现在这个布局文件显示的应该是这个样子:
这里写图片描述
这下按钮就可以工作了,但是和text不同,text稍后会被用户输入一些东西,它便会很好的填充屏幕上没有使用的空间。你可以使用LinearLayout的权重属性做到这一点,可以使用android:layout_weight来指定权重。

如果所有的weight值都是0,那么如果你在其中一个View中指定任何比0大的值,那么这个View将会把剩下的空余空间全部占满。

使输入框填充屏幕的宽度

如果需要使EditText占据屏幕上的剩余空间,那么只需要做到以下几点:
1. 在EditText的属性中添加layout_weight,并设置值为1。
2. 另外,EditText的layout_width属性可以设置为0dp:

<EditText
    android:layout_weight="1"android:layout_width="0dp"... />

3 . 当指定了权重会影响布局效果,应该把EditText的宽设置为0,因为使用了wrap_content的话会要求系统计算一次不必要的宽度,因为权重会要求系统进行重新计算并使用剩余的宽度。
以下就是使用了权重的效果:
这里写图片描述
以下是修改好的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"android:orientation="horizontal"><EditText android:id="@+id/edit_message"android:layout_weight="1"android:layout_width="0dp"android:layout_height="wrap_content"android:hint="@string/edit_message" /><Button
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/button_send" />
</LinearLayout>

运行APP

在AS中点击toolbar上的Run按钮这里写图片描述

如果要使用命令行,切换路径到工程下,然后执行:

ant debug
adb install bin/MyFirstApp-debug.apk

下一节会学习如何响应button的点击事件,读取EditText的内容,然后启动另一个Activity。

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

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

相关文章

字节码增强技术探索

1.字节码 1.1 什么是字节码&#xff1f; Java之所以可以“一次编译&#xff0c;到处运行”&#xff0c;一是因为JVM针对各种操作系统、平台都进行了定制&#xff0c;二是因为无论在什么平台&#xff0c;都可以编译生成固定格式的字节码&#xff08;.class文件&#xff09;供JVM…

LeetCode 1137. 第 N 个泰波那契数

文章目录1. 题目2. 解题1. 题目 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 示例 1&#xff1a;输入&#xff1a;n 4 输出&#xff1a;4 解释&#…

Calibration: 一个工业价值极大,学术界却鲜有研究的问题!

文 | kid丶(知乎作者)编 | 夕小瑶尽管深度学习给工业界带来了一波上线春天&#xff0c;但是总有很多比较难的业务&#xff0c;模型反复迭代后准确率依然达不到预期的产品标准&#xff0c;难以满足用户期望。以下为工业界常见讨&#xff08;si&#xff09;论&#xff08;b&#…

肖仰华 | 大规模、高质量的金融知识图谱,如何自动化构建?

本文转载自公众号&#xff1a;恒生技术之眼。◆本文根据2019恒生技术开放日肖仰华教授演讲整理◆肖仰华&#xff1a;复旦大学教授、博士生导师&#xff0c;复旦大学知识工场实验室创始人。知识图谱&#xff08;Knowledge Graph, KG&#xff09;本质上是一种大规模语义网络&…

Android官方开发文档Training系列课程中文版:构建第一款安卓应用之启动另一个Activity

原文地址&#xff1a;http://android.xsoftlab.net/training/basics/firstapp/starting-activity.html#CreateActivity 在完成了上一节课之后&#xff0c;你有了一个带有输入框和按钮的单屏幕Activity。在这节课中&#xff0c;你将会在MyActivity中添加一些代码&#xff0c;以…

美团点评Kubernetes集群管理实践

背景 作为国内领先的生活服务平台&#xff0c;美团点评很多业务都具有非常显著、规律的”高峰“和”低谷“特征。尤其遇到节假日或促销活动&#xff0c;流量还会在短时间内出现爆发式的增长。这对集群中心的资源弹性和可用性有非常高的要求&#xff0c;同时也会使系统在支撑业务…

论文浅尝 | 基于知识图谱 Embedding 的问答

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为知识图谱问答。来源&#xff1a;WSDM 2019链接&#xff1a;https://dl.acm.org/citation.cfm?doid3289600.3290956目前知识图谱问答&#xff08;本文简写为QA-KG&#xff0c;question answeri…

NeurIPS 2020 | 没有乘法的神经网络,照样起飞?

文&#xff1a;苏剑林编&#xff1a;兔子酱单位&#xff1a;追一科技今天给大家介绍一篇1962年的论文《Computer Multiplication and Division Using Binary Logarithms》[1]&#xff0c;作者是John N. Mitchell&#xff0c;他在里边提出了一个相当有意思的算法&#xff1a;在二…

LeetCode 1160. 拼写单词

文章目录1. 题目2. 解题1. 题目 给你一份『词汇表』&#xff08;字符串数组&#xff09; words 和一张『字母表』&#xff08;字符串&#xff09; chars。 假如你可以用 chars 中的『字母』&#xff08;字符&#xff09;拼写出 words 中的某个『单词』&#xff08;字符串&…

MTFlexbox自动化埋点探索

1. 背景 跨平台动态化技术是目前移动互联网领域的重点关注方向&#xff0c;它既能节约人力&#xff0c;又能实现业务快速上线的需求。经过十年的发展&#xff0c;美团App已经变成了一个承载众多业务的超级平台&#xff0c;众多的业务方对业务形态的快速迭代和更新提出了越来越高…

Android官方开发文档Training系列课程中文版:添加ActionBar之设置ActionBar

导言- 添加ActionBar 原文地址&#xff1a;http://android.xsoftlab.net/training/basics/actionbar/index.html ActionBar是很多重要的特性之一&#xff0c;你可以用它实现用户的自定义行为。它提供了若干的用户界面特性&#xff0c;以便你的应用可以很快的提供与其它应用很…

论文浅尝 | 具有图卷积网络和顺序注意力机制的应用于目标导向的对话系统

论文笔记整理&#xff1a;吴涵&#xff0c;天津大学硕士&#xff0c;研究方向&#xff1a;自然语言处理。来源&#xff1a;2019 Association for Computational Linguistics论文链接&#xff1a;https://www.mitpressjournals.org/doi/full/10.1162/tacl_a_00284开放源码&#…

Docker的基本使用(部署python项目)+两个奇技淫巧,将 Docker 镜像体积减小 99%

两个奇技淫巧&#xff0c;将 Docker 镜像体积减小 99% 使用Docker运行程序 Docker的基本使用(部署python项目) 一、准备项目 我写的是一个爬取某ppt网站的代码&#xff0c;就一个ppt1.py是爬虫&#xff0c;然后&#xff0c;ppts是存放下载的ppt的 二、准备requirement.txt文件…

Pytorch与Tensorflow,哪个更适合你?

本文转载自公众号“夕小瑶的卖萌屋”&#xff0c;专业带逛互联网算法圈的神操作 -----》我是传送门 关注后&#xff0c;回复以下口令&#xff1a; 回复【789】 &#xff1a;领取深度学习全栈手册&#xff08;含NLP、CV海量综述、必刷论文解读&#xff09; 回复【入群】&#xf…

LeetCode 500. 键盘行

文章目录1. 题目2. 解题1. 题目 给定一个单词列表&#xff0c;只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。 示例&#xff1a; 输入: ["Hello", "Alaska", "Dad", "Peace"] 输出: ["Alaska", &quo…

XGBoost缺失值引发的问题及其深度分析

1. 背景 XGBoost模型作为机器学习中的一大“杀器”&#xff0c;被广泛应用于数据科学竞赛和工业领域&#xff0c;XGBoost官方也提供了可运行于各种平台和环境的对应代码&#xff0c;如适用于Spark分布式训练的XGBoost on Spark。然而&#xff0c;在XGBoost on Spark的官方实现中…

Android官方开发文档Training系列课程中文版:添加ActionBar之添加Action按钮

原文地址 : http://android.xsoftlab.net/training/basics/actionbar/adding-buttons.html 添加Action按钮 ActionBar允许在当前的APP上下文内添加很多重要的功能按钮。这样便可以通过图标或者文字作为功能按钮直接展示在ActionBar上。功能按钮如果没有足够空间或无足轻重的按…

快手搜索技术部招聘NLP算法工程师!

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术工作职责快手搜索技术部招聘&#xff0c;负责研发快手主APP搜索中的关键NLP模型/算法&#xff0c;包括但不限于&#xff1a;适合快手数据生态的NLP预训练语言模型&#xff0c;并推动预训练模型在query解析&am…

论文浅尝 | 解决知识图谱补全中的长尾关系和不常见实体问题

论文笔记整理&#xff1a;汪寒&#xff0c;浙江大学硕士。链接&#xff1a;https://www.aclweb.org/anthology/P19-1024.pdf动机KG的分布遵循长尾分布&#xff0c;大部分关系只有很少的三元组&#xff0c;且大体趋势是关系出现的频率和与之相关的不常见实体的比例呈反比关系。而…

LeetCode 944. 删列造序

1. 题目 题目链接 每个单词的位组成的列非降&#xff0c;最少删除几列。 示例 1&#xff1a;输入&#xff1a;["cba", "daf", "ghi"] 输出&#xff1a;1 解释&#xff1a; 当选择 D {1}&#xff0c;删除后 A 的列为&#xff1a;["c&quo…