




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android开发基础目录描述用户接口1设计用户接口3存取识别符6程序逻辑11完成BMI程序14描述用户接口将一份创意落实到可执行的应用程序,背后需要的是从阅读与写作程序代码中累积的经验,并有坚持理念、直到完成的耐心。表达用户接口我们可以先用前几章教的方法设定并执行仿真器,看看仿真器运作后的结果: 我们看到一个文字字段元元,上面有一串文字 Hello World, Bmi!。这就是 Android 默认程序架构的范例啰。 由于才刚开始实际接触到 Android 应用程序,我们先从简单的开始:这一节中,我们的目标是将 Hello World, Bmi! 换成别的文字。 那么,Hello Worl
2、d, Bmi!,这串字符串藏在哪里呢? 先打开 res/layout/main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android= 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent" 6 > 7 <Text
3、View 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content" 10 android:text="Hello World, Bmi" 11 /> 12 </LinearLayout>原来Hello World, Bmi!字符串就藏在res/layout/main.xml这个档案的第 10 行中。我们只要简单地将第 10 行修改成如下 android:text="Hello World, Bmi!”再执行一次仿真
4、器,就可以得到一个相似的应用程序,只是内文变成了我们刚刚修改的内容。 既然找到了Hello World, Bmi!字符串,我们就试着将android:text属性值从Hello World, Bmi!改成哈啰,BMI,然后执行看看吧。 android:text="哈啰,BMI"结果发现 Android 仿真器中文嘛也通,字型也相当漂亮。 要开始学习 Android 应用程序确实很简单吧?不过为了显示Hello World, Bmi,也用到了许多程序代码。到底这些程序代码有什么含意呢? 我们马上来学习 main.xml这个 XML 界面描述文件的内涵吧。 Android 平台
5、里,用户接口都是透过 ViewGroup 或 View 类别来显示。ViewGroup 和 View 是 Android 平台上最基本的用户接口表达单元。我们可以透过程序直接呼叫的方法,调用描绘用户接口,将屏幕上显示的接口元素,与构成应用程序主体的程序逻辑,混合在一起编写。或是,也可以将接口显示与程序逻辑分离,照着 Android 提供的这个较优雅的方式,使用 XML 描述文件,来描述接口组件的组织。 讲解我们看到的Hello World, Bmi就包含在main.xml 这个档案中。 接着,我们就直接分部份来讲解这个main.xml 档案里的内容: 第 1 行 <?xml versio
6、n="1.0" encoding="utf-8"?>XML (Extensible Markup Language) 是一种标记描述语言,不管是语法还是看起来的样子,都相当类似网页所使用的 HTML 标记语言。XML 被广泛地运用在 Java 程序的设定中。main.xml 档里,第一行是每个 XML 描述档固定的开头内容,用来指示这个文本文件是以 XML格式描述的。 第 2, 6 与 12 行 <LinearLayout xmlns:android=" HTML 网页卷标相当类似。 <LinearLayout><
7、/LinearLayout>"线性版面配置"(LinearLayout)卷标,使用了两个LinearLayout标签,来表示一个接口组件的区块。后头的卷标前加上一个/符号来表示结束卷标。"线性版面配置" 所指的是包含在 LinearLayout 卷标中,所有组件的配置方式,是将一个接一个组件由上而下排队排下来的意思。 xmlns:android=" 开头的这串叙述,是用来宣告这个 XML 描述档案的的名称空间(NameSpace),后面接的URL(网址),表示这个描述档案会参照到 Android 名称空间提供的定义。 所有 Android
8、 版面配置档案的最外层标签中,都必须包含这个属性。 注意标签需要两两对称。一个标签<linearlayout>在一串叙述的前头,另一个标签</linearlayout>在叙述的末尾。 如果你修改过的标签没有闭合(忘了加 <、/、> 等符号),Eclipse 画面上也会出现小小的警示符号来提醒你。 第 3-5 行 android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent
9、"这些包含在<linearlayout>卷标中的叙述被称为LinearLayout卷标的属性。Android 应用程序在 layout 目录中的卷标,大多数的属性前都有一个android:前缀。同一个接口组件的属性之间,是以空白做区隔,因此事实上你也能将多个属性写在同一行。当然,将属性排成多行更易于阅读。我们应该保持这个好习惯。 接口组件都有许多共同的属性,例如接口组件的长,宽度设定属性。Android 接口组件的宽度、长度设定属性分别叫做android:layout_width、android:layout_height。两个都设定为 fill_parent参数值。fi
10、ll_parent 如其名,所表达的的意思就是"填满整个上层组件"。默认 LinearLayout 接口组件就会占满整个屏幕空间。 接口组件彼此间也会有一些不同的属性,例如 LinearLayout(线性版面配置) 卷标的android:orientation(版面走向) 属性。在此填入 vertical (垂直)属性值,表示这个接口的版面配置方式是从上而下垂直地排列其内含的接口组件。 android.view.ViewGroup 是各种布局配置(layout)和视图(View)组件的基础类别。常见的实现有 LinearLayout(线性版面配置)、FrameLayout(
11、框架版面配置)、TableLayout(表格版面配置)、AbsoluteLayout(绝对位置版面配置)、RelativeLayout(相对位置版面配置)等。 虽然有这么多种版面配置方式可以选用,但大多数的应用程序并不需特地去改变默认的 LinearLayout 的配置,只要专注在其中填入需要的接口组件即可。所以从第 7 行之后的内容才是一般应用程序开发时较常修改之处。 第 7 和 11 行 <TextView />TextView (文字检视)是我们看到的第一个熟悉的接口组件。其作用是显示文字到屏幕上。你可能注意到这个标签结尾使用了 /> 符号。 />符号表示这个XM
12、L叙述中没有内文,亦即此接口组件描述中不再包含其他接口组件,也表示这个接口组件就是这个屏幕中最小的组成单元了。 第 8-10 行 android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello World, bmi"我们来看看 TextView 接口组件中包含了哪些属性。 android: layout_width和android:layout_height我们刚刚已经学过了,分别代表宽度跟长度。android: l
13、ayout_width 的 fill_parent 参数值表示宽度填满整个上层接口组件(即 LinearLayout 接口组件)。android:layout_height则是用上一个新的参数值wrap_content(包住内容),亦即随着文字字段元元行数的不同而改变这个接口组件的高度。最后的 android:text 属性则是 TextView 接口组件的主要属性,亦即文字字段元元中显示的文字内容。至于string/hello 这段字符串所代表的意义,马上会接着在后面章节说明。我们现在已知道是:只要将android:text属性内容替换成我们想要文字,在预览画面或在仿真器中就会显示对应的文字
14、。 将以上的 XML 描述综合起来,我们就可以得知main.xml 想表达的界面。 设计用户接口视图(View)软件设计的过程中,常常会遇到需要频繁修改用户接口的情境。改着改着程序设计师们就累积起了一些经验,也归纳出了许多应对之道。如著名的 MVC(Model-View-Controller) 模式。Google Android 为我们考虑了接口修改问题。Android 为了单纯化接口修改方式,采用了目前比较流行的解决方案-即将接口描述部份的程序代码,抽取到程序外部的 XML 描述文件中。 我们在前面的过程里已经学到,如何在 Android 应用程序中替换 TextView 接口组件所显示的纯
15、文本内容。那么.这个经验能不能直接用到 BMI 应用程序的设计上呢? 我们先回过头来想想, BMI 应用程序最少应该需要什么些什么组件。 为了输入 BMI 程序所需的身高体重值,大致上我们需要两个 TextView 组件用来提示填入身高体重数字元,另外也需要两个文字输入字段元元用来填入身高体重数字。我们还需要一个按钮来开始计算,而计算完也需要一个 TextView 组件来显示计算结果。于是初版的 BMI 应用程序编程接口的样子就浮现出来了。 查阅文件话说回来,我们从哪得知各种可用的接口组件呢?其中一个方法是查阅档。 Android 文件网站上找到各种可用接口组件列表。 例如我们想查看 Edit
16、Text 的内容,我们可以点进 EditText 连结查看其内容。 你会看到一个详细地惊人的网页。 这边举其中常用到的 EditText 接口组件为例。EditText 接口组件的作用就是提供一个文字输入字段元元。EditText 继承自另一个叫 TextView 的接口组件,TextView 接口组件的作用是提供文字显示,所以 EditText 接口组件也拥有所有 TextView 接口组件的特性。 此外,檔中你也可以查找到 EditText 字段元的一些特殊属性,如 android:numeric="integer"(仅允许输入整数数字)、android:phoneNu
17、mber="true"(仅允许输入电话号码),或android:autoLink="all"(自动将文字转成超链接)。 例如要限制 EditText 中只允许输入数字的话,我们可以在 XML 描述档中,透过将 EditText 的参数android:numeric 指定为 true,以限制用户只能在 EditText 文字字段元元中输入数字。 脱机文件当你处于没有网络连接的情况下时,也可以找到 Android 档参考。 在下载了 android-sdk 后,将之解压缩,你可以在android-sdk/docs 目录中 (android_sdk/docs/
18、reference/view-gallery.html) ,找到一份与在线文件相同的文件参考。 开始设计我们从实例来开始,定义一个基本 BMI 程序所需的身高(Height)输入字段,就会用到 EditText,与 TextView 接口组件,其描述如下: 1 <TextView2 android:layout_width="fill_parent"3 android:layout_height="wrap_content"4 android:text="身高 (cm)"5 />6 <EditText android
19、:id="+id/height"7 android:layout_width="fill_parent"8 android:layout_height="wrap_content"9 android:numeric="integer"10 android:text=""11 />可以看到 EditText 接口组件描述的基本的组成与 TextView 接口组件相似,都用到了android:layout_width与android:layout_height属性。 另外,指定的另外两个属性a
20、ndroid:numeric、android:text则是 EditText 接口组件的特别属性。android:text属性是继承自 TextView 接口组件的属性。 android:numeric="integer" android:text=""将 android:numeric 指定为 integer,可以限制用户只能在 EditText 文字字段元元中输入整数数字。android:text属性则是指定 EditText 接口组件默认显示的文字(数字元)。 我们再来看看 Button (按钮)接口组件 <Button android:id
21、="+id/submit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="计算 BMI 值" />Button 接口组件同样有 android:layout_width与android:layout_height属性,另外一个android:text属性则用来显示按钮上的文字。 整合我们这就从档中挑出我们需要的 TextView(文字检视)、EditText(编辑文字)、Button(
22、按钮) 三种接口组件,照前面的设计摆进 LinearLayout (线性版面配置)组件中。 完整的main.xml界面描述文件如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"
23、; > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="身高 (cm)" /> <EditText android:id="+id/height" android:layout_width="fill_parent" android:layout_height="wrap_content" android:nu
24、meric="integer" android:text="" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="体重 (kg)" /> <EditText android:id="+id/weight" android:layout_width="fill_parent" androi
25、d:layout_height="wrap_content" android:numeric="integer" android:text="" /> <Button android:id="+id/submit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="计算 BMI 值" /> <TextView a
26、ndroid:id="+id/result" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /> <TextView android:id="+id/suggest" android:layout_width="fill_parent" android:layout_height="wrap_content" and
27、roid:text="" /> </LinearLayout>我们可以启动仿真器检视执行结果。或是在页面卷标下选择Layout卷标,来预览页面布局。 启动仿真器之后,仿真器画面上出现了两个输入字段。字段上方分别标示着身高 (cm)、体重 (kg)。在两个输入字段下方,是一个标示着计算 BMI 值的按钮。 当你在字段元中试着输入文字或数字元(你可以直接用计算机键盘输入,或按着仿真器上的虚拟键盘输入)时,你也会发现,正 XML 描述档的描述中对两个 EditText 字段所规定的,字段元中只能输入数字。 我们在上面XML描述档中定义的最后两个 TextView
28、 接口组件,由于并未替这两个接口组件指定android:text属性,所以在屏幕上并未显示。这两个接口组件在后面章节中会派上用场。 革命的路还长高兴了没多久,你发现按下"计算 BMI 值" 按钮后,应用程序完全没反应。 这是正常的,因为我们还没处理从接口输入取得身高体重、将数值导入 BMI 计算方式、将结果输出到屏幕上.等等 BMI 应用程序的关键内容。 不过在进入了解程序流程之前,我们还有一个android:id属性尚未解释哩。 接着我们将透过讲解android:id属性,来进一步了解 Android UI。 可视化的接口开发工具目前的 ADT 版本提供了预览接口的功能,
29、但尚未提供方便地可视化拖拉接口组件的开发工具。以后也许 ADT 会加入完整的 GUI 拖拉设计工具。 但在 ADT 加入完整的 GUI 拖拉设计工具之前,已经有人写出来了对应 Android 的 GUI 拖拉设计工具,可供使用。 存取识别符在上一章谈了 XML描述文件中接口组件的各种android:开头的属性。要使用一个接口组件,第一件事就是定义出接口描述文件。大部分的接口组件(如 LinearLayout、TextView)不需要在程序中作后续处理,因此可以直接描述。不过对于那些将在程序中被参考(reference)到的接口组件(如按钮 Button、文字输入字段元元 EditText),我
30、们需要透过在 XML描述文件中,定义该接口组件的android:id 识别符号属性。之后在程序中所有与这个接口组件有关的操作,都能根据android:id识别符号来在调用这个接口组件。 <EditText android:id="+id/height" />前面章节提过,写作时最好将 XML 描述文件属性分行列出,以易于阅读(增加可读性)。而我们的范例却将 android:id 属性直接摆在 EditText 卷标后。其实这么做同样是基于易于阅读的考虑。当然你也可以将android:id属性分行列出,或是将android:id属性放在属性列表的中间或最后头,这些
31、作法都是允许的,本书中一律采用将 android:id 属性直接摆在接口组件卷标后的写法。 android:id 属性的内容长得比较特别: +id/heightheight是这个接口组件的 android:id。以后的程序中会使用R.id.height来取得这个接口组件。+id 的意思是我们可以通过这个识别符号来控制所对应的接口组件,R类别会自动配置一个位址给这个接口组件。 R类别的内容则可以透过查看 R.java 得知。 XML 描述檔与 R.java 檔在 Android 系统中,我们使用 XML 来定义 UI。但是有些稍微有经验的开发者可能会有疑问: 用 XML 来描述接口固然方便,但是
32、对于手机程序来说,直接用 XML 档案是不是太占空间了?。 没错,如果 Android 是直接使用 XML 来储存接口描述到手机上的话,一定会占用比起现在大的多的档案空间。解决的方法是Android 并不直接使用 XML 档案,而是透过 Android 开发工具,自动将 XML 描述档转换成资源文件。一旦应用程序要使用某个接口或是任何种类的资源(字符串、图片、图标、音效.),都使用索引来查询。 当你建立一个 BMI 新项目,打开位于 src/com/demo/android/bmi 目录下的 R.java檔,你可以看到如下的程序代码: /* AUTO-GENERATED FILE. DO NO
33、T MODIFY. * * This class was automatically generated by the * aapt tool from the resource data it found. It * should not be modified by hand. */ package com.demo.android.bmi; public final class R public static final class attr public static final class drawable public static final int icon=0x7f02000
34、0; public static final class layout public static final int main=0x7f030000; public static final class string public static final int app_name=0x7f040000; 在照着前一章新增了 XML 描述后,再次打开打开 src/com/demo/android/bmi 目录下的 R.java 檔 ,你可以看到如下的程序代码: /* AUTO-GENERATED FILE. DO NOT MODIFY. * * This class was automati
35、cally generated by the * aapt tool from the resource data it found. It * should not be modified by hand. */ package com.demo.android.bmi; public final class R public static final class attr public static final class drawable public static final int icon=0x7f020000; public static final class id publi
36、c static final int height=0x7f050000; public static final int result=0x7f050003; public static final int submit=0x7f050002; public static final int suggest=0x7f050004; public static final int weight=0x7f050001; public static final class layout public static final int main=0x7f030000; public static f
37、inal class string public static final int app_name=0x7f040000; 我们看到在 R.java 档案中,分别有 attr (属性)、drawable (图片、图标)、id (识别符号)、layout (接口描述)、string (文字) 这几种资源型态,就 XML 描述文件中的 id 来说,开发工具会根据 XML 描述檔中指定的 id,生成对应的资源,并自动指定一个地址。 Google 官方檔是这么解释R.java档案的作用的: A project's R.java file is an index into all the re
38、sources defined in the file. You use this class in your source code as a sort of short-hand way to refer to resources you've included in your project. This is particularly powerful with the code-completion features of IDEs like Eclipse because it lets you quickly and interactively locate the spe
39、cific reference you're looking for.The important thing to notice for now is the inner class named "layout", and its member field "main". The Eclipse plugin noticed that you added a new XML layout file and then regenerated this R.java file. As you add other resources to your p
40、rojects you'll see R.java change to keep up.有了R.java做中介,在 XML 描述文件中,我们可以透过 类型/识别符号这样的语法来为某个接口组件提供识别符号,以供程控。 例如,我们可以用 +id/height来为对应供输入身高数字的 EditText 组件提供识别符号。 将字符串抽离 XML当我们在 res 文件夹中新增各种一个 XML 档案,或是一张图片时,开发工具会从 res 文件夹中搜集,并将各种资源汇整成一个索引,自动产生出 R.java 檔。 透过这个特性,我们可以进一步加工我们的 XML 描述文件,让界面更易于维护。 开启 re
41、s/values/strings.xml 原始的内容为 <?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">BMI</string></resources>里面只定义了一个字符串app_name,用来表示应用程序名称(在之后讲解 AndroidManifest.xml 档案时将会用到)。 我们看到表示字符串的格式为 <string name="识别代号"&
42、gt;文字叙述</string>我们将上一章中的叙述抽取出来,整理进 strings.xml 档案。 完整的 strings.xml 档案如下: <?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">BMI</string> <string name="height">身高 (cm)</string> <string name=&qu
43、ot;weight">体重 (kg)</string> <string name="bmi_btn">计算 BMI 值</string> <string name="bmi_result">你的 BMI 值是 </string></resources>在 strings.xml 档案中,我们在原本的 app_name 字符串外,自行定义了另外几个字符串。如果我们再次开启 R.java檔,我们会发现档案中的 string 类别中也自动索引了上面定义好的字符串: publ
44、ic static final class string public static final int app_name=0x7f040000; public static final int bmi_btn=0x7f040003; public static final int bmi_result=0x7f040004; public static final int height=0x7f040001; public static final int weight=0x7f040002; 接着,我们把这些字符串应用到之前定义好的 XML 描述檔中。透过使用 string/识别符号这样存
45、取 string 类型的格式,来取代 main.xml 档案中原本写死的文字叙述。 完整的程序代码如下: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Text
46、View android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="string/height" /> <EditText android:id="+id/height" android:layout_width="fill_parent" android:layout_height="wrap_content" android:numeric=&qu
47、ot;integer" android:text="" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="string/weight" /> <EditText android:id="+id/weight" android:layout_width="fill_parent" android:l
48、ayout_height="wrap_content" android:numeric="integer" android:text="" /> <Button android:id="+id/submit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="string/bmi_btn" /> <TextVi
49、ew android:id="+id/suggest" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /></LinearLayout>再次运行 Android 仿真器,我们看到与前一节完全相同的接口。但就接口而言,透过将描述字符串统一集中在 string.xml 中,我们以后要修改接口时更有弹性了。 至此我们已经完成了 BMI 应用程序负责显示 (View)的部份。
50、新增 XML 档案我们在前面都只修改到开发工具帮我们产生的档案, 而事实上,我们所有在 res 目录中所做的修改,开发工具都会自动搜寻,将之整理到R.java中。因此我们也可以在src/values中建立自己的文字描述档案。 我们这就在res/values目录中建立一个 advice.xml文件,里面将包含 BMI 程序算出 BMI 值后将给予的建议文字,完整的档案如下: <?xml version="1.0" encoding="utf-8"?><resources> <string name="advice_l
51、ight">你该多吃点</string> <string name="advice_average">体型很棒喔</string> <string name="advice_heavy">你该节食了</string></resources>打开R.java檔,我们发现advice_light、advice_average、advice_heavy也已整理进R.java文件的索引中,以供程序调用。 那么接下来,我们就开始进入到了解 Android 程序流程的部分吧。 程
52、序逻辑接着要观察主要程序逻辑的内容啰。打开 src/com/demo/android/bmi 目录下的 Bmi.java档案,Eclipse+Android 开发工具已经帮我们预先建立好了基本的程序逻辑。其预设的内容如下: 1 package com.demo.android.bmi;23 import android.app.Activity;4 import android.os.Bundle;56 public class Bmi extends Activity 7 /* Called when the activity is first created. */8 Override9
53、public void onCreate(Bundle savedInstanceState) 10 super.onCreate(savedInstanceState);11 setContentView(R.layout.main);12 13 讲解比起什么卷标都对称的 XML 接口描述文件来说,这个以 Java 程序语言写成的档案虽然篇幅短,但反而要难读得多。 我们将程序直接拆开,分成几个部份来讲解这个Bmi.java 档案的内容: 第 1 行: package com.demo.android.bmi;这一行的作用是指出这个档案所在的名称空间。package(套件)是其关键词。使用名称
54、空间的原因是程序一旦扩展到扩展到某个大小,程序中的变量名称、方法名称、类别名称难免重复, 这时就可以将定义的名称区隔管理在 package 下,以避免相互冲突的情形发生。Java 的 package 设计成与文件系统结构相对应,如我们的 package 设定是 package com.demo.android.bmi,则这个类别就该在指定目录的com/demo/android/bmi路径下可以找到。 同时也别忘了 Java 程序语言每段叙述语句的结尾处,与大部分的程序语言一样需加上一个分号;,以表示一行程序叙述的结束。 第 3,4 行: import android.app.Activity;
55、import android.os.Bundle;程序中默认导入了 android.app.Activity跟android.os.Bundle两个 Package,在所有的 Android 应用程序中都会用到这两个 Package。import(导入)是用作导入 Package 的关键词。在 Java 语言中,使用到任何 API 前都要事先导入相对应的 Package。我们马上将学到这两个 Package 的用途。 Android 支持的 Package 与标准的 Java(j2se) 不尽相同。在写 Android 应用程序时,你偶而可能需要参考可用的 API 清单,以确认使用到的 Package 是否有内建支持。后续章节中也将讲解如何透过新增jar档来呼叫额外的 Package。 完整的 API 可查阅官方的 package 列表: 第 6,13 行: public class Bmi extends Activity 第6行开始了程序的主体。其组成是这样的: public class BmiBmi是这个类别的名称。class则是用作宣告类别关键词。public关键词是用来修饰Bmi这个类别。表示Bmi是个公开的类别,可以从 p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流供应商评估的方法研究试题及答案
- 保洁防控培训课件教学
- 河南省豫北豫南名校2025届高三第一次调研测试化学试卷含解析
- 实战案例国际物流师试题及答案
- 2024年CPMM线上学习攻略试题及答案
- 保健食品防诈骗课件
- 2024年智能化物流平台建设试题及答案
- 怎样提升供应链的透明度试题及答案
- 提升国际物流师的技巧与试题试题及答案
- 河南省郑州市106中2025年高三第三次模拟考试化学试卷含解析
- 2022年北京市中西医结合医院医护人员招聘考试笔试题库及答案解析
- 门窗报价单样板
- 人教版高中物理选择性必修三 第5章第1节原子核的组成课件
- 《疼痛的药物治疗》PPT课件(PPT 67页)
- DB22∕T 2948-2018 天然、半天然草地牛羊混合放牧技术规程
- 炼油与化工企业电气管理制度
- 煤炭建设井巷工程消耗量定额(2015除税基价)总说明及章说明
- 8.建筑施工设备设施清单
- 小学科技社团活动电子版教(学)案20篇
- 主动脉球囊反搏术(IABP)监测及护理
- 安全生产费用提取台帐(整理)
评论
0/150
提交评论