Android官方开发教程中文版(二)
Android 2.2 API 中文文档
直接子类:
Button, CheckedTextView, Chronometer, DigitalClock, EditText
间接子类: AutoCompleteTextView, CheckBox, CompoundButton, ExtractEditText,MultiAutoCompleteTextView, RadioButton, ToggleButton
android:width
android:maxWidth android:minWidth 1.3 补充说明
设置文字大小,推荐度量单位”sp”,如”15sp” 设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic
(又粗又斜) 2] 可以设置一个或多个,用“|”隔开 设置文本字体,必须是以下常量值之一:normal 0,
android:ems
设置TextView的宽度为N个字符的宽度。这里测试为一个 汉字字符宽度,如图:
android:maxEms
设置TextView的宽度为最长为N个字符的宽度。与ems同 时使用时覆盖ems选项。
2
android:minEms
设置TextView的宽度为最短为N个字符的宽度。与ems同 时使用时覆盖ems选项。
EditText将详细说明。
android:password
以小点”.”显示文本
android:phoneNumber
设置为电话号码的输入方式。
android:privateImeOptions
设置输入法选项,此处无用,在EditText将进一步讨 论。
android:scrollHorizontally
用,可设置为负数,单独使用没有效果。
Android开发教程入门(软件安装流程)
Android开发教程第一部分:安装SDK这里介绍如何安装Android的SDK开发包和配置开发环境。
如果你还没有下载SDK,点击下面的链接开始。
Download the Android SDK系统和软件配置要求要通过Android SDK中提供的代码和工具进行Android应用程序的开发,需要一个合适的用于开发的电脑和合适的开发环境,具体要求如下:支持的开发环境EclipseEclipse 3.2,3.3(Europa)Android开发工具插件(可选)其他的开发环境或者IDEJDK5.0或者JDK6.0(仅有JRE是不够的)安装SDK下载好SDK包后,将zip文件解压缩至合适的地方。
在下文中,我们默认你的SDK安装目录为$SDK_ROOT 你可以选择将$SDK_ROOT/tool s加入到你的路径中1.Linux下,打开文件~/.bash_profile或者~/.bashrc,找到设定PATH环境变量的一行,将$SDK_ROOT/tools的完整路径加入其中。
如果没有找到设定PATH变量的行,你可以自己添加一行:export PATH=${PATH}:<你的$SDK_ROOT/tools的完全路径>2.Mac下,在你的home目录中找到文件.bash_profile,和Linux的一样处理。
如果还没有在机器上设定这个文件,你可以创建一个.ba sh_profile文件。
3.Windows下,右键点击【我的电脑】,选择【属性】,在【高级】页中,点击【环境变量】按键,在弹出的对话框中双击“系统变量”中的变量“Path”,将$SDK/tools的完全路径加入其中。
通过将$SDK/tools加入系统路径,在运行adb和其它一些命令行工具时就不需要键入完全路径名了。
需要注意到是,当你升级了SDK后,如果安装路径有变动的话,不要忘记了更新你的PATH变量的设置,将其指向变动后的路径。
安装Eclipse插件(ADT)如果你选择Eclipse作为Android的开发环境,可以安装一个专门为Android定制的插件:Android Development Tools(ADT),ADT插件集成了对Android工程和工具的支持,它包含了大量功能强大的扩展,使得创建、运行、调试Android程序更简单更快捷。
Android移动开发基础教程 第2章 Android界面开发
android:textSize
显示文字的大小
android:textColor
显示文字的颜色
android:gravity
文字在文本框中的位置
android:ellipsize
文字内容超过文本框大小时的显示方式
android:password
是否以点代替显示输入的文字
android:editable
设置当前对话框是否可以被取消
setIcon(Drawable icon)
设置对话框的标题图标
setItems(CharSequence[] items, .OnClickListener listener)
DialogInterface
将对话框的内容设置为列表
setMessage(CharSequence message)
2.4 对话框
自定义对话框
除了创建已有的对话框样式外,AlertDialog.Builder还支持调用serView()方法显示自定义的View。
通过XML布局文件控制Android的界面,可以使界面的设计更加简单清晰,具有更低地耦合性。而且这种方式可以将 视图的逻辑从Java代码中抽离出来,更加符合MVC的设计原则。Android也推荐使用XML的方式设计界面。
Android开发基础知识入门
第2章 Android界面开发
2.2 常用布局
线性布局
2.1 视图组件和视图容器
基本概念
(1)组件或控件:界面的基本元素; (2)视图(View):所有控件的基类; (3)视图容器(ViewGroup):控件的载体;
Android开发基础知识入门
第2章 Android界面开发
2.1 视图组件和视图容器
Android官方开发教程中文版(一)
Android官方开发教程中文版创建你的第一个App创建你的第一个App欢迎加入Android应用开发。
本课程将教你如何创建你的首个Android应用。
你将学习到如何创建Android项目和运行它的可调试版本。
你还会学习到Android应用设计的基本原理,包括如何创建简单用户界面和处理用户输入。
在你开始本课程之前,你要确信你的开发环境已经设置好,你需要:1.下载Android SDK。
2.为Eclipse安装ADT插件(如果你的IDE是Eclipse)。
3.使用SDK Manager下载最新的SDK工具和平台。
如果你还没有完成这些任务,那么开始下载Android SDK并完成随后的安装步骤。
一旦你完成安装,也就做好了开始本课程的准备工作。
本课程采用教程的格式,通过逐步构建一个小型的Android应用,教你了解一些关于Android开发的基本概念,因此,你应该遵循教程中的每一个步骤。
创建Android项目一个Android项目包含Android应用的所有文件以及源代码。
Android SDK工具可以很轻松地使用默认的目录和文件开始一个新的Android项目。
本课程将演示如何使用Eclipse(含ADT插件)或SDK工具从命令行创建新项目。
注意:你应该已经安装了Android SDK,并且如果你使用的是Eclipse,那么你也应该安装了ADT插件(版本21.0.0或更高),如果你还没有完成这些,在开始本课程之前请按照前面的指南安装Android SDK。
使用Eclipse创建项目1.在工具样上点击New。
2.在出现的窗口中,打开Android文件夹,选择Android Application Project,点击Next。
3.填写以下内容:●Application Name:用户看到的应用名称,在本项目中,使用“My First App”。
●Project Name:项目目录的名称,并且在Eclipse中也能看到的名称。
basic4android+开发教程
basic4android 开发教程翻译(一)建立模拟器和第一个Hello worlrd程序如果你还没有安装Basic4android和Java SDK,请先参照后面的链接里面的安装和配置方法:/forum/basic...droid-sdk.html在这个教程里面,我们将建立一个新的AVD (Android Virtual Device)并生成模拟器实例. 然后我们将建立一个简单的程序,这个程序将显示一个简单的信息框,并写一个信息到日志里.你也可以通过IDE 连接到一个真正的设备上:使用ADB连接你的设备使用B4A-Bridge连接你的设备常见的问题解决列在在本教程的后面. 如果你碰见的问题没在列表或者无法解决的话, 请与*********************联系建立新的AVD- 运行Basic4android.- 选择Tools 菜单- Run AVD Manager.稍等几秒种.- 不同版本和配置的SDK Manager 可能显示不太一样. 你需要选择Tools - Manage AVDs.- AVD Manager 就会显示如下:- 选择New 并填写类似下图的相应的字段(建议选择HVGA) :- 点击Create AVD.- 你可以建立多个AVD.每个可以具有不同的分辨率,也可以对应不同的API 版本(首先你需要安装额外的平台).- 现在点Start来启动模拟器- 你会看见好几个窗口弹出和消失,这个是正常情况. - 模拟器开始启动:等待... 第一次需要好几分钟才能等到模拟器准备好. 当看见下面屏幕时说明模拟器准备好了:你也可能会看到下面的屏幕,这是锁屏界面:把开锁图标拽到右面来解锁设备.没有必要每次分发程序时都重启模拟器. 模拟器一直在保持运行状态.如果你对Android不太熟悉,你可以先使用模拟器. 按中间的小方块按钮进入应用程序页面.疑难解答: 如果碰见类似下面的错误信息:invalid command-line parameter: Files\Android\android-sdk\tools/emulator-arm.exe.Hint: use '@foo' to launch a virtual device named 'foo'.那你就需要重新安装Android SDK到一个没有空格的目录,例如c:\android.编写第一个Basic4android 程序- 由于这是一个新程序,我们需要先需要通过选择File - Save来设置保存位置.强烈建议将每一个工程保存到自己的目录下.- 新建一个目录: "Hello world", 打开目录并把程序保存为"Hello world".- 在Sub Activity_Create里面输入下面代码:Code:Sub Activity_Create(FirstTime As Boolean)Log("Hello world!")Msgbox("Hello world! ","First program")End Sub- 按F5 编译并发布你的程序到模拟器上.将会出现包对话框(空白的):每一个Android 应用使用一个唯一的包名来标识这是一个使用逗点分割的合成字符串.这个字符串至少应该包括两部分.你不能安装使用同一个包名的两个不同应用程序到一个设备. 你可以使用tools菜单随时来改变包名.- 输入包名.- 下一步,会让你输入应用的标签.这个就是用户看到的应用名称.你的程序现在就被编译好并安装到模拟器上:模拟器比真实设备慢得多.由于安装非常快,在很多情况下直接在真实设备上工作更方便.你可以随时重新发布你的程序. 并不需要关闭模拟器上正在运行的程序.使用LogCat跟踪日志Android 设备保留一个内部缓冲来存储日志信息. 使用这些信息可以很方便的调试程序. 你可以切换到LogCat 面板并按connect来查看日志:当我们运行两次这个程序后,就可以看见上面的屏幕快照里面有两个"Hello world!"信息.取消"Filter"勾选就会显示所有的信息(不仅仅是你程序的信息).Hello world常见问题- "emulator: ERROR: no search paths found in this AVD's configurationweird, the AVD's config.ini file is malformed. Try re-creating it."当你的windows 用户名含有非ASCII字符时就会出现这个问题. 因为Android SDK 寻找对应目录失败.解决方法是建立一个目录,并命名为: c:\android,然后增加一个ANDROID_SDK_HOME的环境变量,并设置其值为c:\android.- "invalid command-line parameter: Files\Android\android-sdk\tools/emulator-arm.exe.Hint: use '@foo' to launch a virtual device named 'foo'."这个错误是因为Android SDK被安装到带有空格的目录.通过复制SDK到C:\Android并更新配置路径来解决这个问题.- "javac: target release 1.5 conflicts with default source release 1.7" -当前Basic4android 需要Java 6来运行.并不支持Java 7. 但是在同一个计算机可以同时安装这两个版本.basic4android 开发教程翻译(二)可视化设计与猜数字程序要学习本教程,请先参考下面的教程:安装Basic4android 和Android SDKHello world - 安装Android 模拟器在这个教程里面我们要使用设计器来建立layout. 这个layout包括一个文本框和一个按钮.用户需要猜一个随机的数字. 用户在文本框里面输入数字并通过点按钮提交猜的数字.然后系统会通过"toast"信息来给用户提示其输入的数字比系统选择的数字大还是小.- 建立一个新工程并保存它.-选择菜单来打开设计器.设计器有两部分组成.一部分是"控制面板", "控制面板"是IDE 的一部分,它包含所有的属性和选项:另外一部分是运行在模拟器上的"可视"元件:正如其名,可视化面板可以显示layout,并允许你移动和改变views的大小.在可视化面板上改变layout 的话,会同时改变控制面板上的保存的值.由于所有的数据都保存在控制面板上,因此我们不用担心模拟器崩溃或者被关掉.当你下一次连接上时,layout 会自动重新显示.首先要连上设备.请点Tools - Connect.这一步需要几秒钟时间. 请注意IDE 会一直保持这个连接直到IDE 被关闭,关闭设计器并不断开这个连接.使用Add View menu 菜单来增加一个Button, 一个EditText 和一个Label.并按下图来设置相应的属性和位置:改变Activity的Drawable 属性为GradientDrawable来取得过渡色效果.小贴士: 当你在小的显示器工作时,你会发现点了"Top Most"(在控制面板右上角)勾选后会感觉非常方便.这样控制面板就会显示在最上方而不会被模拟器挡住.保存这个layout,并命名为Layout1.layout是一个非常重要的概念,因为其在你的代码和设计之间建立了完全的分界.layout被保存成一个文件,扩展名为".bal".每个工程可以有好几个这样的文件,除非你显式的载入一个layout 文件,否则不会在你工程中造成任何影响.一旦你保存了一个layout, 它会自动的被加入"File manager". 你可以在IDE右面的"Files"面板里面看见它.我们将要使用button的click 事件.每个view 都有一个EventName的值. 在设计器里面是属性, 当在程序中添加view 时,会作为一个参数传递到Initialize过程中.为了使用一个事件,你应该使用下面的格式写一个子程序(其实很简单):Sub <EventName>_<Event> (event parameters).在设计器里,EventName属性默认为view的名字.如果我们要通过按钮的EventName的值来调用按钮的click 的事件的话,我们应该按照下面的格式写:Sub Button1_ClickSo here is the complete code:Code:Sub Process_GlobalsEnd SubSub GlobalsDim MyNumber As IntDim EditText1 As EditText 'will hold a reference to the view added by the designerEnd SubSub Activity_Create(FirstTime As Boolean)Activity.LoadLayout("Layout1") 'Load the layout file.MyNumber = Rnd(1, 100) 'Choose a random number between 1 to 99End SubSub Button1_ClickIf EditText1.Text > MyNumber ThenToastMessageShow("My number is smaller.", False)Else If EditText1.Text < MyNumber ThenToastMessageShow("My number is larger.", False)ElseToastMessageShow("Well done.", True)End IfEditText1.SelectAllEnd Sub一些注意事项:- 每个activity 模块都有一个Activity 对象,你可以使用这个对象来访问activity.- Activity.LoadLayout 可以用来载入layout文件.- 还有其他views也可以载入layout 文件. 例如Panel 和TabHost. 对于TabHost,每个页面都可以通过载入layout文件来建立.- 为了访问在设计器里面添加的views, 我们需要在Sub Globals里面定义它们.- ToastMessageShow 用来显示一段短的信息, 并且会在一小段时间后消失.在这里使用toast message其实不是非常合适,因为有时当软键盘打开时会使其无法提示.写事件子程序的小贴士:在IDE里, 先写Sub,然后按空格键. 你会看到小的提示"press tab to insert event declaration".再按tab键, 选择对象类别并选择事件.现在你做的就是写需要的事件名和按回车.支持多种屏幕分辨率和方向每个layout文件可以包含一系列layout变体.每个layout变体保存views的不同的位置和大小的值.例如, 你改变任何view的文本的话,所有的变体的会自动改变. 然而当你改变view 的位置的话,只会影响当前变体的值.请注意,如果需要的话,按比例缩放会自动进行.这意味着当我们运行在一个高分辨率设备的时候,layout会自动缩放的.然而你可以为不同的缩放选择建立不同的变体.当你载入一个layout文件时,最匹配设备的那个变体将会被载入.一般你需要两个变体:- 320 x 480, scale = 1 (160 dpi). 这个是竖向的默认的比例.- 480 x 320, scale = 1 (160 dpi). 横向的默认比例.好, 重新打开设计器.载入Layout1 文件.选择"New Variant" 并选择480 x 320 (第二个选项).选择模拟器,并通过按Ctrl + F11改变模拟器的方向.请注意,设备的layout详情会在变体列表下面出现.请如下图改变layout:你可以改变当前所选的变体,然后看看它是如何影响可视的layout.保存这个layout并运行这个程序.现在改变模拟器的方向,看看layout是如何对应改变的.每次当方向改变的时候,Android 就会销毁老的activity并建立新的activity. 每次Activity.LoadLayout将会被再次调用. 因此非常不幸,每次要猜的数会被重新选择. 当然这个会很简单的改正... 但这不是本教程要做的.工程文件在附件下载.这个教程的最后小贴士:- IDE的Files菜单下面包括一个"Export as zip"选项. 用来生成一个包括所有需要文件的zip文件.文件下载地址: /android/fil...ssMyNumber.zipbasic4android 开发教程翻译(三)IDE 小贴士basic4android 的IDE 功能强大,它帮助你专注于写代码和建立你的应用.下面列出一些不容易发现的特色:- Ctrl + Space = 自动完成按Ctrl + Space 激活自动完成功能,它会把得到的关键字,变量,模块,方法,子程,属性,字段等以列表显示出来. 并且在很多时候会列出这些项目的描述.在写了一些字母后按Ctrl + Space通常会自动出现以这些字母开头的项目.- 工具提示信息- 当写方法的参数时,工具提示会显示方法的定义和描述.工具提示有时可能会挡住你需要的重要代码,你可以按ESC 隐藏它.你也可以按CTRL 键将其变为半透明,然后再按CTRL恢复回去.LogCat - LogCat面板里面显示设备内置的日志. 这些日志用来做调试非常方便. 你可以使用Log关键字来记录这些信息.为了开始显示这些日志,你需要按Connect 按钮.可以过滤这些日志,以便你只看到Basic4android和你的应用生成的日志.注意: 如果你连接的好几个设备,你可以通过按Connect按钮来替换到不同的设备.设计器生成成员工具- 这个工具让你生成设计器里面的views 的定义和事件的代码. 请注意: 你只需要定义那些要在代码里面使用的views.如果你选了已经存在的项目不会有什么影响的(不会生成重复的代码).可以通过设计器窗口选择Tools - Generate Members来显示这个窗口.后台编译- 按Alt + 3可以编译和安装你的程序,同时保证IDE 可以正常反应你的操作.屏幕下的状态条会显示处理过程的进度和什么时候安装完成.当过程失败时,会有一个短的声音提醒你. 在这种情况下,你就必须使用正常编译(F5),以便查看错误信息(取决于什么类型的错误).操作多个连接的设备- 在很多情况下,你可能同时连接好几个设备. 对于任何操作,都会显示一个连接设备的列表,你可以在列表里面选择你的目标设备.如果你是用后台编译的话,就会使用再次最后的一个设备. 这个通常比每次在前台选择目标设备方便的多.设计器- 复制- 通过选中view 并通过选择Tools - Duplicate View,你可以复制任何一个view.如果这个view 有子views的话,同时会把子views也复制上.导出成zip - 导出成zip 选项可以建立一个包含所有工程需要文件的zip 文件. 当你需要备份和与别人共享工程时,这个功能就非常有用.这个功能位于Files菜单下.清理工程/ 清理无用文件- 清理工程删除所有的生成的文件. 这些文件是在编译过程中生成的.清理无用文件是删除位于Files目录下没有被工程使用的文件(它不会删除任何工程layou t 引用的文件).在删除前会有一个无用文件的列表(这让你可以取消这个操作).运行AVD Manager - AVD manager 允许你建立和启动模拟器. 这个菜单打来manager.请注意,当启动一个模拟器后,不需要保持AVD manager一直打开,你可以关闭它.两个附加提示:1.事件子程原型-有一个特殊的自动完成特性可以帮助你写事件子程原型.开始写Sub并跟一个空格:就会出现下图.按Tab 键:就会显示一个当前所有的类型的列表(它们至少有一个事件). 选择需要的类型并按回车.再选择特定的事件.类似下面的代码就会被生成:EventName字符串将被选中, 改变它为对象的"EventName"值,然后按回车. 就这么简单.2. 设计器top most属性- 设计器有一个"top most"勾选框,选中后可以保持设计器成为最前面的窗体.这在屏幕比较小时,设计器和模拟器要同时工作时比较方便.调试数据- 默认情况下,Basic4android编译器会加入一些调试数据到你的代码.当发生错误时,这些数据就非常有用. 它可以使程序显示出错的原始代码行.这些数据要使用一些空间并可能影响运行性能,但是一般影响都不会太大.你可以通过Project菜单- 取消Include Debug Information的选中来去掉这些数据.basic4android 开发教程翻译(四)调试应用程序这个教程说明在Basic4android v1.50 后加入的新的调试功能及其他相关的工具.在Project菜单下有一个叫Attach Debugger的新选项.如果这个选项是选上的话,那么编译的的代码就会包含调试代码.调试代码允许IDE 与程序建立连接并检查它的运行.当程序运行时,首先会等10秒钟与IDE 建立连接. 通常IDE 会很快连接上的. 然而当你手工从电话上运行这个程序时,就会看到这个等待.编译的APK文件会以_DEBUG.apk后缀保存.由于这个文件包含调试信息,因此一般不应该分发这个apk文件,其在实际运行中会造成巨大的拖延.这个菜单下的另外的一个选项是Include Debug Information.这个选项当Attach Debugger option被选上的话不会有任何效果.当Attach Debugger没有被选上的话(这意味着调试代码没有被加入)这个选项决定原始的B4A 代码是否被加到编译的APK文件中. 增加B4A代码有特殊的用处.当出错时,错误信息会包含原始的B4A 代码行,而不仅仅是Java行.(译者注: b4a 首先把basci 语法转换成Java 代码,然后编译的)当我们把Attach Debugger选上然后运行程序时,IDE 将屏幕的下方打开一个调试模块:调试模块包含三部分: subs stack, global variables and local variables.当程序暂停时这些部分显示相应的数据.你也可以把鼠标放到一个变量名上来查看它的值.在subs stack 部分上面有四个按钮,分别对应继续执行,执行到下一行,暂停执行和停止程序.后面还有一个图标告诉我们调试器是否连接上.双击这个图标可以不用关闭程序就断开调试器.同时还有一个Debug菜单,里面包括了Step Over (执行下一行并在内部的子程序调用时不中断) 和Step Out (运行完当前子程后中断) 项.当调试模块出现时,代码编辑器会保持只读.断点- 你可以把代码里面的一行作为断点.通过点击代码左面灰色区域来设置一个断点.当程序运行到断点时会暂停,这时你就可以查看当前的运行状态了.日志- 右边面板上的Logs页面是非常有用的. 它显示元件生存循环中的相关信息, 它也可以显示使用Log 关键字输出的信息. 你可以通过按Connect按钮来连接设备的日志.请注意,有一个Filter 的勾选框.当选上时,你只看到与你程序相关的信息.当没有被选上的时候,你会看到运行系统上的所有信息.当你碰到一个错误却在日志里面没有看见任何相关信息时,可以试着去掉filter 选中来查找一下错误信息.由于这个日志是设备来维护的,因此当你连接上一个设备时,你也会看到以前的信息.关于调试器的注意事项:- 在下面子程中的断点会被忽略: Globals, Process_Globals and Activity_Pause.- 服务- 调用StartService 后面出现的断点会被忽略. 在Service_Create 和Service_Start里设置的断点会暂停程序一段时间(大约12 秒).这是防止OS 杀掉这个服务.- 当程序暂停时,触发的事件将被执行.在事件中的断点会被忽略(仅仅发生在程序已经被暂停).- 从设备传送到IDE 的数据有大小限制. 太长的字符串会被截断.basic4android 开发教程翻译(五)Android进程及activitys 生存周期简而言之:每个Basic4android 程序在它自己的进程中运行.一个进程拥有一个主线程,这个主线程也叫做UI 线程,它会一直运行到进程结束.一个进程也可以有好几个线程,这些线程用来做一些后台工作.当用户启动一个应用时,一个进程就开始了工作, 假设其并没有已经在后台运行.进程的结束是不确定的. 有时可能发生在用户或者系统关闭掉所有的activities后.假设你有一个activity,当用户按了返回键,这个activity被关闭了. 以后当电话的内存不够时这个进程就会退出了(最后肯定会出现这种情况的).如果用户再次运行这个程序时,而这个进程并没有被杀掉的话,这个进程就会被再次使用.一个Basic4android应用是由一个或者多个activities组成. Android 支持其他几个"main"元件.这些以后将在以后版本的Basic4android中加入.Activities有点类似wondows 的窗体.主要的差别是当一个activity不在前台时,为了节省内存, 这个activity可能会被杀掉. 通常在activity消失前,你需要保存它的状态. 要么保存到一个持久的存储上,要么保存到它的进程的内存里.以便以后当需要这个activity时,重新建立它.另一个需要小心的地方是当设备的主要配置发生变化时. 最常见情况是方向的变化(用户旋转了设备). 当这些变化发生时,当前的activities会被销毁和重建. 现在当我们建立activity时,我们可以根据新的配置来建立(例如, 我们现在知道新的屏幕尺寸).我们如何处理这些呢?当你建立一个新的activity时,你可以使用下面的代码模版:Code:Sub Process_Globals'These global variables will be declared once when the application starts.'These variables can be accessed from all modules.End SubSub Globals'These global variables will be redeclared each time the activity is created.'These variables can only be accessed from this module.End SubSub Activity_Create(FirstTime As Boolean)End SubSub Activity_ResumeEnd SubSub Activity_Pause (UserClosed As Boolean)End Sub变量可以是全局的和局部的. 局部变量是定义在子程里面而不是定义在Process_Globals 和Globals里.局部变量被限制在本子程内. 子程一旦结束,这些变量就不再存在.全局变量可以被所有的子程访问.有两种类型的全局变量.进程变量和activity变量.进程变量- 这些变量与进程的生存期一致.你应该把把这些变量定义到sub Process_Globals里面.当进程开始时,这个子程被调用一次(不仅仅是第一个activitie,对所有的activities都一样).这些变量应该仅仅是"公开"变量. 这意味着它们也可以被其它模块访问.然而,不是所有类型的对象都可以被定义为进程变量.例如,所有的views不能被定义成进程变量.主要原因是我们不想保留一个可能随着activity销毁而被销毁的引用对象.换句话说,一旦activity被销毁了, activity上所有的views 也会同时被销毁.如果我们保留着一个view的引用,垃圾收集器就不能释放这些资源,就会造成内存泄漏.编译器强制执行这个要求.Activity变量- 这些变量包含在activity中.你应该在Sub Globals中定义这些变量.这些变量是"私有的"并且只能在当前activity模块中访问.所有的对象类型都可以被定义为activity变量.每次activity建立时, Sub Globals就会被调用(在Activity_Create之前).这些变量的生存期与这个activity一致.Sub Activity_Create (FirstTime As Boolean)当activity建立后,就会调用这个子程.当用户启动应用时,activity就会被建立, 当设备的配置发生变化时(用户转动设备),这个activity就会被销毁.另外,当这个activity 在后台时,为了释放内存,OS 也可能会决定销毁它.这个子程应该用来载入或者建立layout (当然也可以做其他用处).FirstTime 参数用来告诉我们是不是第一次建立这个activity. Firsttime相对于当前进程.你可以使用FirstTime来完成有关进程变量的各种初始化工作.例如,如果你需要读一个含有一个列表的文件,当FirstTime是True 的时候,你可以读取这个文件并将文件中的列表保存为进程变量.现在我们就可以知道这个列表在整个进程的生存期会存在,而不需要每次activity建立后都重新读取这个列表.总而言之, 你可以检查FirstTime是否为True,然后初始化进程变量.Sub Activity_Resume 和Sub Activity_Pause (UserClosed As Boolean)每次当activity从前台转换到后台时就会调用Activity_Pause子程.当activity 在前台时,但是配置发生变化时(这会导致activity暂停并被销毁), 也会调用Activity_Pause子程. Activity_Pause 是保存重要信息的最后的一个地方.一般有两种机制来让你保存activity状态.仅与当前应用有关的信息可以被保存到一个或多个进程变量中.其他信息应该保存到持久存储上(文件或者是数据库).例如,如果用户改变了一些设置,你应该在这里把这些改变保存到持久存储上. 否则这些变化可能会丢失.当Activity_Create完成后会立刻调用Activity_Resume.另外就是当继续一个暂停的activity也会调用它(被切换到后台的activity又被切换到前台).注意:当你打开一个不同的activity时(通过调用StartActivity),当前的进程首先被暂停,然后另外的activity将被建立(如果需要的话),然后当前进程会继续执行(总是这样).通过以上讨论, 每次当activity从前台切换到后台时Activity_Pause就会被调用. 这可能是以下原因造成的:1. 启动了一个不同的activity.2. Home键被按了.3. 配置改变事件被触发(例如方向发生变化).4. Backj键被按了.在1和2的情况下, activity将会被暂停,并被保存到内存中以便以后再次使用.在3的情况下, activity将会被暂停,销毁.然后再建立(并继续).在4的情况下, activity将会被暂停然后销毁. 按Back键类似与关闭activity. 在这种情况下,你没必要保存任何实例特定的信息(例如PacMan游戏中的pacman的位置).这中情况下,UserClosed 参数为true.其他情况下都是false. 请注意当你调用Activity.Finish时,它也是true. 这个方法暂停和销毁当前activity,和Back键类似.你可以使用UserClosed 参数来决定需要保存那些数据和重置任何相关的进程变量为初始化值(如果位置是进程变量的话,移动pacma n的位置到中间).处理UI状态的一个新模块请参考这里: /forum/basic...ngs-state.htmlbasic4android 开发教程翻译(六)使用B4A-Bridge连接你的设备到目前为止,我们在开发中有两种方法来测试应用.一种是通过Android 模拟器来测试.另外就是当你的设备支持ADB调试的话,可以直接连到真实设备上测试.Android模拟器相比真实设备慢得多(尤其是安装应用).因此大多情况下使用真实设备更方便.我个人也仅仅是在用可视化设计器时才使用模拟器.然而不是所有的设备都支持ADB调试.这就是为什么要使用B4A-Bridge工具的原因.B4A-Bridge由两个元件组成. 一个元件运行在实际设备上,另外一个是IDE 的一部分,后者可以连接到前者,并与实际设备通讯.连接是通过网络实现的(如果没有网络的话,B4A-Bridge 不能工作).一旦建立连接, B4A-Bridge支持所有的IDE 特性, 包括:安装应用,查看LogCat和可视化设计.Android 不允许一个应用悄悄的安装另外一个应用,因此当你使用B4A-Bridge运行你的应用时,会显示安装确认界面.开始使用B4A-Bridge1. 首先你需要把B4A-Bridge安装到你的设备上.你可以在这里下载B4A-Bridge: /android/files/b4a_bridge.apk.B4A-Bridge同样也可以在Android市场里面找到. 查找: B4A Bridge.请注意你需要允许系统可以从"未知源"安装应用. 这个可以通过系统设置里面更改.2. 在你的设备上运行B4A-Bridge.它会显示一个如下图的界面:状态就是: Waiting for connections(等待连接).3. 在IDE菜单里选择Tools - B4A Bridge - Connect.你需要输入真实设备屏幕上显示的IP地址.IDE 屏幕下方状态条会显示当前的状态:就这么简单.当B4A-Bridge被连接后,它首先检查设计器应用是否需要更新,如果需要更新的话,它会首先安装设计器应用. 除非你按了Stop键,B4A-Bridge会作为一个服务一直运行着.。
《Android应用开发教程 第2版》课后习题参考答案
《Android应用开发教程第2版》课后习题参考答案第一章1.主流的Android版本有哪些,各有何特点?Android最早的一个发布版本开始于2007年11月的Android 1.0 beta,其后发布了多个更新版本。
这些更新版本都在前一个版本的基础上修复了bug并且添加了前一个版本所没有的新功能。
从2009年4月开始,Android操作系统改用甜点来作为版本代号,这些版本按照大写字母的顺序来进行命名:纸杯蛋糕(Cupcake)、甜甜圈(Donut)、闪电泡芙(Éclair)、冻酸奶(Froyo)、姜饼(Gingerbread)、蜂巢(Honeycomb)﹑冰激凌三明治(Ice Cream Sandwich)、雷根糖(Jelly Bean)、奇巧(KitKat)、棒棒糖(Lollipop)、棉花糖(Marshmallow)、牛轧糖(Nougat)、奥利奥(Oreo )、馅饼(Pie)等。
此外,Android操作系统还有两个预发布的内部版本,它们分别是铁臂阿童木(Astro)和发条机器人(Bender)。
2.Android的系统结构如何?由里向外有如下几层:1.Linux Kernel(Linux内核)Android是在Linux2.6的内核基础之上运行的,提供核心系统服务:安全、内存管理、进程管理、网络组、驱动模型。
2.Android Runtime(Android运行时)内核之上是核心库和一个叫做Dalvik的JAVA虚拟机。
核心库提供了Java语言核心库中包含的大部分功能,虚拟机负责运行程序。
3.Libraries(库)Android提供了一组C/C++库,它们为平台的不同组件所使用。
开发人员通过Application Framework来使用这些库所提供的不同功能。
4.Application Framework(应用程序框架)无论Android提供的应用程序还是开发人员自己编写的应用程序,都需要使用到Application Framework。
Android开发和调试中文文档
Android中文文档:开发和调试在eclipse上开发Android应用程序在用eclipse IDE开发android应用程序之前,你首先要创建一个Android工程,并且建立一个启动配置,在此之后你才可以开始编写,运行,以及调试你的应用程序。
以下章节是假设你已经在eclipse环境中安装了ADT插件,如果你没有安装,请安装之后再使用以下说明。
参考安装eclipse 插件(ADT)创建一个android工程ADT提供了一个新的工程向导,你可以快速的创建一个新的工程或者在现有代码上创建工程。
创建工程的步骤如下:选择File > New > Project选择 Android > Android Project, 然后按下 Next选择项目内容:选择 Create new project in workspace,为编码创建一个全新的工程。
输入工程名称(project name),基础软件包的名称(the base package name),以及Activity 类的名称。
以创建stub .java文件等文件和程序名字。
选择Create project from existing source ,为已有代码创建一个工程。
如果你想编译运行SDK中提供的示例程序,可以使用这个选项。
示例程序的存放在SDK的samples/目录下。
浏览包含已有代码的目录,点击ok,如果目录中包含有可用的android manifest 文件,ADT 将为你填写合适的软件包,activity,和应用程序名称。
按下Finish.ADT插件会根据你的工程类型创建合适的文件和文件夹,如下:src/ 包含stub .java Activity文件的文件夹.res/ 资源文件夹.AndroidManifest.xml 工程清单.创建一个启动项能够在eclipse上运行调试应用程序之前,你必须为它创建一个启动项。
Android官方开发教程中文版(三)
Android官方开发教程中文版支持不同设备支持不同设备Android设备来自世界各地,有不同形状和尺寸。
通过广泛的设备类型,你的应用有机会影响到庞大的受众。
为了在Android系统中尽可能地成功,你的应用需要适用各种设备配置。
你应该考虑包括不同语言、屏幕尺寸以及不同版本的Android平台的某些重要的变化。
本课程教你如何用一个程序包,使用基本的平台特性,利用可替换资源和其它特性,在多种Android兼容设备上优化用户体验。
支持不同语言从你的App代码中,把界面的字符串提取出来放在外部文件中总是一个好习惯。
在Android项目中使用资源目录使这一切变得很容易。
如果你使用Android SDK工具创建项目(参见“创建Android项目”),它会在项目根目录下创建一个res/目录,res/目录下包括多种资源类型的子目录。
这里会有几个默认文件,比如res/values/strings.xml就保存了你的字符串值。
创建本地化目录和字符串文件要支持更多的语言,在res/目录下创建一个额外的values目录,并在目录名称的末尾包含连字符和标准国家代码。
例如,values-es/目录包含了为语言代码“es”本地化的简单资源。
Android系统会根据设备运行时的区域设置加载适当的资源。
一旦你决定了要支持哪些语言,创建相应的资源子目录和字符串文件,例如:MyProject/res/values/strings.xmlvalues-es/strings.xmlvalues-fr/strings.xml在对应的文件中添加本地化字符串。
运行时,Android系统会基于用户设备上的区域设置使用对应的字符串集。
例如,下面针对不同语言的字符串资源文件。
英语(默认区域),/values/strings.xml<?xml version="1.0" encoding="utf-8"?><resources><string name="title">My Application</string><string name="hello_world">Hello World!</string></resources>西班牙语,/values-es/strings.xml<?xml version="1.0" encoding="utf-8"?><resources><string name="title">Mi Aplicación</string><string name="hello_world">Hola Mundo!</string></resources>法语,/values-fr/strings.xml<?xml version="1.0" encoding="utf-8"?><resources><string name="title">Mon Application</string><string name="hello_world">Bonjour le monde !</string></resources>注意:你可以对任何资源类型使用区域限定符(或任何配置限定符),比如你想为你的位图资源提供一个本地化版本。
Android基础与应用开发教程 第2章 Android应用程序开发基础
2.4 Android 的其他开发工具
1. Android开放辅助开工具库(Open Accessory Development Kit) 2. Android App Inventor(应用程序发明家) 3. HyperNext Android创建器 4. Simple规划 5. Basic4android
2.1 Android软件开发概述
第4层:应用(Applications)层,是Java语言编写的应用程序。Android手机中预 装了若干应用程序,它们可高速地运行在Dalvik虚拟机上,如电话拨号、日历、地 图、浏览器、通讯录、SMS<短信)、E-Mail客户端、游戏等。此外,还可编写自己 的应用程序或从Android市场(Android Market上下载应用程序,将它安装在自己 的手机上使用。
2.2 Android SDK
2.2.4 Android排错工具
为了便于程序调试Android SDK除 了提供模拟器之外,还提供了一个排错 工具android调试桥(adb)。程序开发过 程中难免出现这样或那样的错误,调试 (Debug或称为“排错”)工具是必不可 少的。Android的adb除提供程序编码 排错外,还可以连接到个叹计算机与 Android模拟器。
(3)Java编程语言和XML编辑器:Java编程语言编辑器包含常见的IDE功能,如编译时语法检查、 代码自动补足。ADT还提供了自定义XML的编辑器,可以用UI形式来编辑Android特有的XML文件。 它的图形化布局编辑器允许使用拖放方式设计用户界面。
(4)集成了Android架构API的综合文件:可以将鼠标悬停在类、方法或变量上来访问文档。
2.1 Android软件开发概述
第3层:应用架构(Application Frameworks)层,是应用程序架构API的集合,其主 要目的是让应用程序开发者便于利用其中常用的例行程序进行架构设计,以便快速开发 Android应用程序。常见的API包括:
Android应用程序开发(第二版)课后习题答案.doc
第一章Android简介1.简述各种手机操作系统的特点.答案:目前,手机上的操作系统主要包括以下几种,分别是Android、iOS、Windows Mobile、Windows Phone 7、Symbian、黑莓、PalmOS和Linux。
(1)Android是谷歌发布的基于Linux的开源手机平台,该平台由操作系统、中间件、用户界面和应用软件组成,是第一个可以完全定制、免费、开放的手机平台。
Android底层使用开源的Linux操作系统,同时开放了应用程序开发工具,使所有程序开发人员都在统一、开放的开发平台上进行开发,保证了Android应用程序的可移植性。
(2)iOS是由苹果公司为iPhone、iPod touch、iPad以及Apple TV开发的操作系统,以开放源代码的操作系统Darwin为基础,提供了SDK,iOS操作系统具有多点触摸操作的特点,支持的控制方法包括滑动、轻按、挤压和旋转, 允许系统界面根据屏幕的方向而改变方向,自带大量的应用程序。
(3)Windows Mobile是微软推出的移动设备操作系统,对硬件配置要求较高,一般需要使用高主频的嵌入式处理器,从而产生了耗电量大、电池续航时间短和硬件成本高等缺点,Windows Mobile系列操作系统包括Smartphone、Pocket PC和Portable Media Center。
随着Windows Phone 7的出现,Windows Mobile 正逐渐走出历史舞台。
(4)Windows Phone 7具有独特的“方格子”用户界面,非常简洁,黑色背景下的亮蓝色方形图标,显得十分清晰醒目,集成了Xbox Live游戏和Zune音乐功能,可见Windows Phone 7对游戏功能和社交功能的重视。
(5)Symbian是为手机而设计的实时多任务32位操作系统,它的功效低,内存占用少,提供了开发使用的函数库、用户界面、通用工具和参考示例。
android移动开发基础案例教程第二版知识点
android移动开发基础案例教程第二版知识点1. 引言在移动互联网时代,Android移动开发已经成为一个非常热门的领域。
作为一名Android开发者,掌握Android移动开发基础知识是至关重要的。
本文将围绕《Android移动开发基础案例教程第二版》这本书籍中的知识点展开讨论,并为读者提供深度和广度兼具的学习指导。
2. Android移动开发基础概述Android移动开发基础是指在Android评台上进行应用程序开发所需的基本知识和技能。
这包括Android系统架构、应用程序开发框架、用户界面设计、数据存储与管理、多媒体开发、网络通信等方面的内容。
《Android移动开发基础案例教程第二版》系统地介绍了这些知识点,并通过实际案例来帮助读者深入理解和掌握。
3. 深度探讨Android移动开发基础知识点3.1 Android系统架构Android系统架构包括Linux内核、库、运行时、应用框架和应用程序。
在《Android移动开发基础案例教程第二版》中,详细介绍了Android系统的各个层次,以及它们之间的关系和交互方式。
读者可以通过学习这部分内容,了解Android系统的整体结构,为后续的应用程序开发打下基础。
3.2 应用程序开发框架Android应用程序开发框架是指用于构建Android应用程序的一系列软件组件和工具。
这包括活动(Activity)、服务(Service)、内容提供程序(Content Provider)和广播接收器(Broadcast Receiver)等。
通过《Android移动开发基础案例教程第二版》的详细讲解,读者可以系统地学习这些组件的使用方法,并掌握它们之间的交互关系。
3.3 用户界面设计Android应用程序的用户界面设计是非常重要的一部分。
《Android 移动开发基础案例教程第二版》通过大量的实例和案例,介绍了Android应用程序的布局、控件、事件处理等方面的知识,帮助读者设计出美观、实用的用户界面。
Android开发指南中文版
Android开发指南中文版‐应用程序框架Android Developers本文是对Android SDK1.5版的英文开发资料Android Development Guide一文应用程序框架部分的翻译,覆盖了Android应用开发所有主要的概念。
部分内容整理自网络。
本文仅用于技术学习,请勿用于商业用途。
目录应用程序基础Application Fundamentals (4)关键类 (4)应用程序组件 (5)激活组件:intent (7)关闭组件 (7)manifest文件 (8)Intent过滤器 (8)Activity和任务 (10)Affinity(吸引力)和新任务 (11)加载模式 (12)清理堆栈 (13)启动任务 (14)进程和线程 (14)进程 (15)线程 (15)远程过程调用 (15)线程安全方法 (16)组件生命周期 (17)Activity生命周期 (17)调用父类 (18)服务生命周期 (21)广播接收器生命周期 (22)进程与生命周期 (22)用户界面User Interface (24)视图层次View Hierarchy (24)布局Layout (25)部件Widgets (26)用户界面事件UI Events (26)菜单Menus (26)高级话题Advanced Topics (27)适配器Adapter (27)风格与主题Styles and Themes (27)资源和资产Resources and Assets (28)资源引用Resource Reference (43)国际化和本地化Internationalization and Localization (43)意图和意图过滤器Intents and Intent Filters (43)意图过滤器Intent filters (47)通常情况Common cases (51)使用意图匹配Using intent matching (52)数据存储Data Storage (52)概览Storage quickview (52)系统偏好:快速,轻量级存储 (52)文件:存储到设备内部或可移动闪存 (52)数据库:任意的结构化存储 (52)支持基于网络的存储 (52)系统偏好Preferences (53)文件Files (54)数据库Databases (54)网络Network (55)内容提供器Content Providers (55)内容提供器的基础知识Content Provider Basics (55)查询一个内容提供器Querying a Content Provider (57)修改数据Modifying Data (61)创建一个内容提供器Creating a Content Provider (64)Content URI 总结 (67)清单文件The AndroidManifest.xml File (68)清单文件结构Structure of the Manifest File (68)文件约定File Conventions (70)文件特性File Features (73)应用程序基础Application Fundamentals关键类1. Activity2. Service3. BroadcastReceiver4. ContentProvider5. IntentAndroid应用程序使用Java做为开发语言。
《Android应用开发技术(第2版)》课件07网络编程-多线程
12
Handler涉及的概念
概念
主线程 (UI线程)
子线程 (工作线程)
消息 (Message)
消息队列 (Message Queue)
处理者 (Handler)
循环器 (Looper)
定义
作用
备注
当应用程序第1次启动时,会同时 自动开启1条主线程
人为手动开启的线程
处理与UI相关的事件,如更新、操作等 执行耗时操作,如网络请求、数据加载等
ቤተ መጻሕፍቲ ባይዱcorePoolSize Thread Thread
Thread maximumPoolSize 线程回收
18
ThreadPoolExecutor
使用ThreadPoolExecutor的基本步骤包括:
① 创建任务类,重写run()方法 ② 使用Executors的工厂方法创建线程池 ③ 向线程池提交任务 ④ 关闭线程池
创建 (2) new Handler()
message1
(7) handler.handleMessage()
message2 message3 message4
(6) handler.dispatchMessage()
(3) Looper.loop()
message1
MessageQueue对象
第7章 Android网络编程
➢ sendEmptyMessage(int what):发送空消息 ➢ sendEmptyMessageDelayed(int what, long delayMillis):指定延时多少毫秒后发送空信息 ➢ sendMessage(Message msg):立即发送信息 ➢ sendMessageDelayed(Message msg, long delayMillis):指定延时多少毫秒后发送信息 ➢ hasMessage(int what):检查消息队列中是否包含what属性为指定值的消息 ➢ post(Runnable r) ➢ postAtTime(Runnable r, long uptimeMillis) ➢ postDelayed(Runnable r, long delayMillis)
《Android应用开发教程 第2版》课件8 事件处理
一个典型的操作过程如下。 1)在MainActivity类中定义一个成员变量用于引用需要监听的组件。 2)建立一个继承自类似OnClickListener接口的类,主要为了重写 其中的事件响应方法。 3)在MainActivity类的onCreate()方法中为按钮注册监听,这样当 基于该组件的事件发生后,就会调用相应重写的方法进行处理了。
public class ScreenTouchEventActivity extends Activity implements
OnTouchListener{
@Override
protected void onCreate(Bundle savedInstanceState){
Super.onCreate(savedInstanceState);
事件监听处理机制
2、基于回调机制的事件处理”
自定义控件的一般步骤如下。 1) 定义自定义组件的类名,并继承某个控件类或其子类。 2) 重写父类的一些方法(回调方法)。依据业务需要重写父类的
部分回调方法,比如onDraw()方法用于实现界面显示,其 他方法还有onSizeChanged()、onKeyDown()、onKeyUP() 等。除了重写回调方法外,通常还需要提供一个构造器,当 Java代码创建该控件或依据XML布局文件载入并构建界面时都 将调用该构造器。 3) 使用自己定义的控件。既可以通过Java代码来创建,也可通过 XML布局文件创建,注意在XML布局文件中,该组件的标签时 完整的包名+类名,不再是原来的类名。
this.setOnTouchListener(this);
setContentView(yout.main);
android移动开发基础案例教程第二版记事本案例
android移动开发基础案例教程第二版记事本案例Android移动开发基础案例教程第二版记事本案例是一个基于Android系统的应用程序开发案例,旨在帮助初学者了解Android应用程序的基本结构和开发流程。
以下是该案例的简要概述和关键步骤:案例概述记事本案例是一个简单的文本编辑器应用程序,用户可以在其中创建、编辑和保存文本文件。
该案例涵盖了Android开发中的基本概念,如活动(Activity)、布局(Layout)、意图(Intent)和数据存储等。
关键步骤1. 创建新项目:使用Android Studio创建一个新的Android项目。
2. 设计用户界面:使用XML布局文件设计应用程序的用户界面,包括文本输入框、保存按钮等。
3. 创建活动:创建一个新的活动(Activity),用于处理用户输入和应用程序逻辑。
4. 处理用户输入:在活动中编写代码,处理用户的输入,如文本编辑和保存操作。
5. 数据存储:实现数据存储功能,将用户输入的文本保存到本地文件中。
可以使用Android提供的文件存储API。
6. 测试应用程序:在模拟器或真实设备上测试应用程序,确保其正常运行并满足预期功能。
7. 调试和优化:根据测试结果调试代码,优化性能和用户体验。
注意事项在开发过程中,确保遵循良好的编程实践,如变量命名规范、代码注释等。
考虑用户界面设计的可用性和美观性,以提高用户体验。
学习和掌握Android开发的基本概念和API,以便更好地理解和应用它们。
通过这个案例,你可以逐步掌握Android开发的基础知识,并学会如何开发一个实用的应用程序。
这有助于你进一步探索更复杂的Android应用程序开发项目。
Android Studio移动应用开发基础(第2版)教学课件第6章 样式和主题
6.5 Android 应用程序的主题结构分析
➢ 在 Android Studio 中新建 Android 应用程序工程时,Android 已经在AndroidManifest.xml 文件中为该 Android 应用程序设置了默认的主题:
6.1 样式入门
➢ 在进行 Android 应用程序的界面设计时,经常需要对界面及界面中的组件设置统一的显示外观,如界面 的背景颜色、文本字号、文本颜色、组件的显示大小、是否显示标题栏等;
➢ 可以为每个组件设置自己的显示属性,但是为了便于对外观进行统一管理,需要将这些外观设置集 ➢ 中起来。Android 是通过样式(Style)完成这项工作的; ➢ 举例说明 Android 是如何定义样式及将定义好的样式应用于界面中的。新建一个名为 Ch0601 的 Android
6.6 同步练习
➢ Android 平台中预定义了很多样式和主题,将表 6-1 中的样式和主题应用于一个 Android应用程序中,观 察每个样式或主题的外观。
Q&A
第6章 样式和主题
Android Studio 移动应用开发基础(第 2 版) 978-7-121-44852-2 电子工业出版社 2023.01
目录
6.1 样式入门 6.2 定义样式 6.3 应用样式 6.4 使用 Android 平台已定义的样式和主题 6.5 Android 应用程序的主题结构分析 6.6 同步练习
➢ 在 Java 文件中,以“R.style.定义样式名称”的格式访问定义的样式,在 XML 文件中,以“@style/自定义样 式名称”的格式访问定义的样式。需要注意的是,在定义样式时,parent属性是可选属性,parent="父样 式名称"表示定义的样式是支持继承的,这种样式是级联样式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android官方开发教程中文版添加操作栏添加操作栏操作栏是你能为你的Activity实现的重要的设计元素之一,它提供了几种用户界面特性,使你的应用能够保持和其它应用的一致性,以便用户很快熟悉它。
主要功能包括:1.用专门的空间为你的应用指定标识并且指示出用户在应用中的位置。
2.以可预测的方式访问重要的操作(如搜索)3.支持导航和视图切换(使用选项卡或下拉列表)本课程提供了关于操作栏基础知识的快速指南,要获得关于操作栏各种特性的更多信息,请参考“操作栏”指南。
设置操作栏操作栏的最基本形式是为Activity显示标题以及在标题左边显示应用图标。
即使是这种简单的形式,操作栏也有利于通知用户当前的位置,以及为你的应用保持一致性。
操作栏包括一个应用图标和Activity标题设置一个基本的操作栏需要你的应用使用一个Activity主题并启用操作栏。
如何获取这样一个主题取决于你的应用支持的最低Android版本。
因此这节课根据你的应用支持的Android最低版本分为两个部分。
仅支持Android3.0及以上版本从Android3.0开始(API级别11),操作栏被包含在所有使用Theme.Holo(或它的派生类)主题的Activity中,当targetSdkVersion或minSdkVersion的值大于等于11时,Theme.Holo 是默认主题。
因此,要在Activity中添加操作栏,只需简单地把这两个属性之一的值设为11或更高就可以了,如:<manifest ... ><uses-sdk android:minSdkVersion="11" ... />...</manifest>注意:如果你创建了自定义的主题,确保它的父类是Theme.Holo主题之一。
详情请参考“操作栏样式”。
现在你的应用使用了Theme.Holo主题,并且所有的Activity都会显示一个操作栏,就是这样。
支持Android2.1及以上版本在比Android3.0更低的旧版本(低至Android2.1)中添加操作栏,需要你的应用包含Android支持库。
现在就阅读“安装支持库”文档并安装v7 appcompat库(一旦你下载了库包,按照说明添加库资源)。
当你把支持库集成到项目中之后:1.更新你的Activity让它继承ActionBarActivity,如:public class MainActivity extends ActionBarActivity { ... }2.在清单文件中,更新<application>元素或指定的<activity>元素,使用Theme.AppCompat之一做主题,如:<activity android:theme="@style/Theme.AppCompat.Light" ... >注意:如果你创建了自定义的主题,确保它的父类是Theme.AppCompat主题之一。
详情请参考“操作栏样式”。
现在当运行在Android2.1或更高版本上时,你的Activity也包含操作栏了。
记住在清单文件中正确设置你支持的API级别。
<manifest ... ><uses-sdk android:minSdkVersion="7" android:targetSdkVersion="18" />...</manifest>添加操作按纽操作栏允许你添加与应用当前上下文相关的重要操作项。
它们作为操作按纽以图标或文本直接出现在操作栏上。
操作栏上无法容纳或不太重要的按纽会隐藏在“更多操作”中。
一个包含了“搜索”按纽和“更多操作”(译注:三个点的图标)的操作栏在XML中指定操作所有操作按纽和“更多操作”中的其它项都在“菜单资源”的XML文件中定义。
要添加操作按纽,在项目的res/menu目录下创建一个新的XML文件。
为每个要添加到操作栏上的项添加一个<item>元素,如:res/menu/main_activity_actions.xml<menu xmlns:android="/apk/res/android" ><!-- Search, should appear as action button --><item android:id="@+id/action_search"android:icon="@drawable/ic_action_search"android:title="@string/action_search"android:showAsAction="ifRoom" /><!-- Settings, should always be in the overflow --><item android:id="@+id/action_settings"android:title="@string/action_settings"android:showAsAction="never" /></menu>这表示当操作栏的空间足够时,“搜索”操作会作为操作按纽出现在操作栏上,而“设置”操作则总是隐藏在“更多操作”中。
(默认情况下,所有操作都会隐藏在“更多操作”中,但是为每个操作显式声明设计目标是一个好的习惯)。
icon属性需要一个图片的资源ID,@drawable后面的名称必须是储存在res/drawable目录下的一个点阵图片名称。
例如,"@drawable/ic_action_search"引用了ic_action_search.png 文件。
同样地,title属性使用了定义在res/values目录下的XML文件中的字符串资源,这一点我们在“创建简单用户界面”中已经讨论过。
注意:当为你的应用创建图标或其它点阵图时,重要的是要提供多个版本为不同的分辨率进行优化。
我们将在“支持不同屏幕”中详细讨论。
如果你的应用使用了支持库以兼容Android2.1,在android:命名空间中将不能使用showAsAction属性,你必须定义你自己的XML命名空间并使用这个命名空间作为属性前缀(一个自定义的XML命名空间应该基于你的应用名称,它也可以是任意一个名称,并且只能在你定义它的文件内访问)。
例如:res/menu/main_activity_actions.xml<menu xmlns:android="/apk/res/android"xmlns:yourapp="/apk/res-auto" ><!-- Search, should appear as action button --><item android:id="@+id/action_search"android:icon="@drawable/ic_action_search"android:title="@string/action_search"yourapp:showAsAction="ifRoom" />...</menu>添加操作到操作栏上要把菜单项放在操作栏上,实现Activity的onCreateOptionsMenu()回调函数,把菜单资源加载到给定的菜单对象中,如:@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu items for use in the action barMenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.main_activity_actions, menu);return super.onCreateOptionsMenu(menu);}响应操作按纽当用户按下操作按纽或“更多操作”中的其它项,系统会调用Activity的onOptionsItemSelected()回调方法。
在实现这个方法时,对给定的MenuItem调用getItemId()方法以确定哪个菜单项被按下。
getItemId()返回的ID对应你在<item>元素android:id属性中定义的值。
@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle presses on the action bar itemsswitch (item.getItemId()) {case R.id.action_search://openSearch();return true;case R.id.action_settings://openSettings();return true;default:return super.onOptionsItemSelected(item);}}译注:原文中没有给出openSearch()和openSettings()两个方法的代码,所以这里把它们注释了。
为低级Activity添加Up按纽在你的应用中,所有屏幕都不是应用的主入口(这些Activity并没有“home”屏幕)。
应该给用户提供一种方法,通过按下操作栏上的Up按纽可以导航到应用逻辑层次中“父屏幕”。
当运行在Android4.1(API级别16)或更高版本上,或是从支持库中使用ActionBarActivity 时,要执行“向上”导航,只需简单地在清单文件中声明父Activity并在操作栏中启用“向上”按纽。
以下是如何在清单文件中声明Activity的父项的例子:<application ... >...<!-- The main/home activity (it has no parent activity) --><activityandroid:name="com.example.myfirstapp.MainActivity" ...>...</activity><!-- A child of the main activity --><activityandroid:name="com.example.myfirstapp.DisplayMessageActivity"android:label="@string/title_activity_display_message"android:parentActivityName="com.example.myfirstapp.MainActivity" ><!-- Parent activity meta-data to support 4.0 and lower --><meta-dataandroid:name="android.support.PARENT_ACTIVITY"android:value="com.example.myfirstapp.MainActivity" /></activity></application>为“向上”按纽启用应用图标,要调用setDisplayHomeAsUpEnabled()方法:@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_displaymessage);getSupportActionBar().setDisplayHomeAsUpEnabled(true);// If your minSdkVersion is 11 or higher, instead use:// getActionBar().setDisplayHomeAsUpEnabled(true);}系统现在知道MainActivity是DisplayMessageActivity的父Activity,当用户按下“向上”按纽时,系统将会导航到父Activity,你不需要处理“向上”按纽的按下事件。