| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 2 构建交互式应用:真正有用的应用 -> 正文阅读 |
|
[移动开发]2 构建交互式应用:真正有用的应用 |
0 绪言大多数应用都需要以某种方式响应用户。 这一章中,你将了解怎样让你的应用更有交互性。你会看到如何让应用做些事情来响应用户,以及如何让活动和布局像朋友一样交谈。在这个过程中,我们还会通过介绍R带你更深入地了解Android具体如何工作,R就像是个秘密宝石,可以把所有这些连接在一起。 1 引入1.1 需求引入这一章中,我们会向你展示如何创建与用户交互的应用:这里会创建一个啤酒荐酒师(Beer Adviser)应用。在这个应用中,用户可以选择他们喜欢的啤酒类型,然后单击一个按钮,会得到一个列表,列出用户可以品尝的一组啤酒。 这个应用的结构如下: 1.布局指定应用是什么样 它包括3个GUI组件:
2.文件strings.xml包括布局所需的所有字符串资源,例如,布局中指定的按钮的标签 3.活动指定应用如何与用户交互 根据用户选择的啤酒类型,利用这个信息显示用户可能感兴趣的一组啤酒。这里要借助于一个定制Java类。 4.定制Java类包含应用的应用逻辑 它包括一个方法,这个方法取啤酒类型作为参数,返回一个列表,其中包括这种类型的所有啤酒。活动会调用这个方法,传入啤酒类型,然后使用得到的响应。 1.2 需要完成的工作1.创建一个工厂 2.更新布局 3.将布局与活动关联:布局只是创建一个可视的组件。要让应用真正聪明起来,还需要把布局与活动中的Java代码关联起来。 4.编写应用逻辑 :要为应用增加一个定制Java类,用它确保用户可以根据选择的啤酒类型得到想要的啤酒。 1.3 更新布局--布局XML与代码讲解1.3.1 布局XML代码布局文件代码为:
下面对这里面的代码进行详解: 1.3.2 常用属性按钮和文本视图是同一个AndroidView类的子类: 按钮和文本视图之所以会有共同的属性,是因为:他们都继承了同一个Android View类。 现在来看常用的属性: android:id 这个属性为组件指定一个标识名。利用ID属性,可以通过活动代码来控制组件完成工作,另外还可以控制组件在布局中的位置: android:id="@+id/button"? android:text 这会告诉Android组件应当显示什么文本。对于<Button>,这就是出现在按钮上的文本。 android:layout_width, android:layout_height 这两个属性指定了组件的基本宽度和高度。"wrap _ content"表示它要足够大,刚好能放下全部内容,表示和自身内容一样的长度。 1.3.3?RelativeLayout元素布局代码中的第一个元素是<RelativeLayout>。<RelativeLayout>元素告诉Android布局中的各个GUI组件要在相对位置上显示。 使用相对布局,意味着GUI组件要相对地定位。 举例来说,可以用这个元素指出你希望某个组件出现在另一个组件左边,或者希望这些组件以某种方式对齐或者排列。 在这个布局代码中,按钮出现在文本视图下面,因此按钮会相对于文本视图显示。 1.3.4 TextView元素<RelativeLayout>中的第一个元素是<TextView>。
这里并没有设置任何属性来指定文本视图显示在布局的什么位置,所以默认地,Android会把它显示在屏幕的左上角。注意,这里为文本视图指定了ID为textView。接下来介绍下一个元素时你会了解为什么需要这个ID。 1.3.5 Button元素<RelativeLayout>的最后一个元素是<Button>
将按钮增加到布局时,我们指定了按钮的位置,把它放在文本视图下面,让按钮的左边界与文本视图的左边界对齐。这里按钮相对于文本视图放置,这在XML中也有体现:
可以用很多不同的方式写布局XML来生成同样的视觉效果。举例来说,上面的XML指定了按钮放在文本视图下面。还有一种等价的说法,可以说文本视图放在按钮上面。 1.3.6 对1.3.1中的布局进行解析1.3.7 使用字符串资源而不是硬编码文本使用字符串资源,不使用硬编码文本,这是一个很好的习惯。 打开app/src/main/res/values/strings.xml文件,编辑一下代码:
?编写完字符串资源之后,将代码更新到布局XML文件中。 1.3.8 spinner元素Spinner元素标签的代码:
目前,布局包括一个spinner,不过其中没有任何内容。使用spinner时,往往要让它显示一个值列表,允许用户选择他们想要的值。 可以像设置按钮和文本视图的文本一样,采用同样的方式为spinner提供一个值列表,也就是使用一个资源。到目前为止,我们已经使用strings.xml指定单个的字符串值。这里要做的就是指定一个字符串值数组,再让spinner引用这个值数组。 增加数组资源与增加字符串类似: 已知向strings.xml添加string 字符串资源的代码:
其中,string_name为字符串的标识符,string_value是字符串值本身。 要增加一个字符串数组,可以使用下列语法:
这里string _ array _ name是数组名,string _ value1、string _value2、string _ value3是组成这个数组的字符串值。 在strings.xml中增加一个字符串数组,内容如1.3.7中所示。 让spinner引用字符串数组 使用语法为:? ?"@array/array_name" 此处的array_name为数组名。 在布局XML文件中,使用这个数组,需要为spinner增加一个entries属性,然后在进行赋值:
1.4 关联活动1.4.1 让按钮做事需要在单击按钮时,让应用根据spinner中选择的值做出响应,我们希望应用能够有一下表现: 1.用户从spinner选择一个啤酒类型? 用户单击按钮查找与类型匹配的啤酒 2.布局指定单击按钮时要调用活动中的哪个方法 3.这个方法获取spinner中选择的啤酒类型值,将它传递到一个名为BeerExpert的Java定制类的getBrands()方法 4.BeerExpert的getBrands()方法查找与这个啤酒类型匹配的啤酒品牌,然后作为一个String ArrayList返回给活动 5.活动得到布局中文本视图的一个引用,将这个文本视图的文本值设置为与类型匹配的啤酒列表。这个啤酒列表将显示在设备上。 1.4.2 让按钮调用一个方法向布局增加一个按钮时,你可能希望当用户单击这个按钮时它能做些什么。为此,要让按钮调用活动中的一个方法。 单击按钮时要让按钮调用活动中的一个方法,这需要对两个文件做出修改:
首先,要使用onClick指定按钮调用哪个方法,只需要在布局文件XML的<button>元素中增加一个android:onClick属性,并指定想要调用的方法名:
其中,method_name表示“单击这个组件时,要调用活动中名为method_name的方法” 1.4.3 默认生成的活动代码分析AS默认创建的活动代码为:
以上,是创建一个基本活动所需的全部代码。 这个类是扩展自?androidx.appcompat.app.AppCompatActivity 的类,而且实现了一个onCreate()方法。 所有的活动都必须扩展AppCompatActivity类。AppCompatActivity包含一组方法,这是这组方法为你的Java类赋予了Android声明,把它从一个普通的Java类变成了一个功能完备的正式的Android活动。 另外所有活动都需要实现o nCreate ()方法。创建活动对象时会调用onCreate()方法,这个方法用来完成一些基本设置,如这个活动与哪个布局关联。这要使用setContentvie w()方法来设置。在上面的示例中,setContentview(R.layout.activity_main)告诉Android这个活动会使用activity_main作为它的布局。 1.4.4 活动代码加入单击方法在1.4.2中为布局中的按钮增加了一个onClick属性,并指定为onClickFindBeer,现在要为活动增加这个方法,使得单击按钮时能调用这个方法。这样的话,用户触摸用户界面中的按钮时,活动就能做出响应。 onClickFindBeer()方法需要有一个特定的签名,否则单击布局中指定的按钮时将无法调用这个方法。这个方法要有以下形式:
?如果方法未采用这种形式,用户触摸按钮时这个方法不会有任何响应。这是因为在后台Android会查找一个有void返回值的公共方法,而且方法名要与布局XML中指定的方法匹配。 方法中的View参数乍一看可能有些奇怪,不过这个参数的存在是有道理的。这个参数指示触发这个方法的GUI组件(在这里就是按钮)。前面已经提到过,GUI组件(如按钮和文本视图)都是某种类型的View。 现在将这个方法添加到活动类MainActivity.java中。然后需要让这个方法运行时做一些具体的工作。要让应用显示与用户所选啤酒类型匹配的一组啤酒。 除此之外,也可以通过获取按钮的id,然后获取Button对象之后,使用Button类中的setOnClickListener()方法来进行单击事件的监听。代码形如:
1.4.5 探究findViewById()与R.java为了达到这个目的,首先需要得到布局中spinner以及文本视图GUI组件的引用。这样一来,我们就能从spinner获取所选啤酒类型的值,另外可以在文本视图中显示文本。 使用findViewByld)得到视图的引用 可以使用一个名为findviewById()的方法得到这两个GUI组件的句柄。 findviewById()方法取GUI组件的ID作为参数,返回一个view对象。然后把这个返回值转换为正确的GUI组件类型(例如,TextView或Button)。 可以如下使用findviewById()得到ID为brands的文本视图的一个引用: ?仔细查看如何指定文本视图的ID。这里并不是传入文本视图的名字而是传入了一个形如R.id.brands的ID。这到底是什么意思?什么是R? ?R.java是一个特殊的Java类,利用这个类可以获取应用中不同资源的引用。 ?R.java是一个特殊的Java文件,只要你创建或构建应用,Android工具就会生成这个文件。它位于工程app\build\generated\not_namespace_xxx_source\r文件夹下的一个包中,这个包与应用包同名。Android使用R跟踪应用中使用的资源,它有很多作用,例如允许在活动代码中得到GUI组件的引用。 如果打开R.java,可以看到其中包含乙烯类内部类,分别对应不同类型的资源。可以在内部类中引用各种类型的资源。? 举例来说,R中有一个名为id的内部类,这个内部类包含一个static final brands.利用一下代码行:
可以由这个值得到brands文本视图的引用. 一旦有了View,就能访问他的方法 findviewById()方法会为你提供GUI组件的一个Java版本。这说明,你可以使用Java类提供的方法获取和设置GUI组件的属性。 1.4.6 通过id设置组件的各种属性值findviewById()方法会为你提供GUI组件的一个Java版本。这说明,你可以使用Java类提供的方法获取和设置GUI组件的属性。 1.设置TextView中的文本 先获取TextView对象brands,然后在这个TextView对象上调用方法。比如想设置brands文本视图中显示的文本内容,TextView类中包含一个setText()方法,用来修改text属性,因此可以通过以下代码完成设置:
2.获取spinner中选取的值 就像得到文本视图的引用一样,可以采用类似的方式得到spinner的引用。像前面一样使用findviewById()方法,只不过这一次要把结果强制转换为一个Spinner:
这会得到一个Spinner对象,现在就能访问这个对象的方法了。来看一个例子,可以如下获取spinner中当前选中的列表项,把它转换为一个String:
因为:
?实际上会返回一个通用的Java对象。这是因为,spinner值可能不是String,比如有可能是一个图像。在这里,我们知道这些值肯定是String,所以可以使用string.valueof()把选中的列表项从Object转换为string。 1.4.7 完整的活动代码V1.0
测试: ?1.5 构建定制JAVA类1.5.1 构建定制Java类---BeerExpert这一章开始时我们说过,这个啤酒荐酒师(Beer Adviser)应用要在一个定制Java类的帮助下推荐啤酒。这个定制Java类用普通的Java编写,根本不知道它将用于一个Android应用。 定制java类的格式要求:
?构建和测试Java类,这是一个纯Java代码,不涉及任何有关Android的内容:
1.5.2 改进活动调用定制Java类来得到真正的建议在活动的第二个版本中,我们要改进onclickFindBeer()方法调用BeerExpert类来得到推荐的啤酒。这里只需要修改普通的Java代码。 自写代码:
输出: ?2.总结
活动中需要有一个相应的方法:
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 19:03:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |