新版Android开发教程笔记基础UI编程4
黑马程序员android开发笔记及源码
01、什么是3G02、android系统简介03、android背景介绍04、android的framewor简介05、两种虚拟机的比较06、sdk的下载以及简介07、创建android模拟器08、ddms简介09、platform-tools的简介及常见adb指令10、android项目的目录结构11、android下apk安装的过程12、常见的adb指令介绍13、创建模拟器遇到的常见错误14、电话拨号器15、点击事件的四种写法16、短信发送器17、相对布局&单位介绍18、现形布局&布局的组合19、表格布局&绝对布局20、帧布局21、测试相关概念22、android下junit测试框架配置23、logcat简介24、保存文件到手机内存25、android下文件访问的权限26、保存文件到SD卡中27、分析setting源代码获取SD卡大小28、_sharePreference入门29、xml文件的序列化30、采用pull解析xml文件31、采用断电调试的方法观察pull解析的的流程32、android下创建一个sqllite数据库33、sql语句实现数据库的增删改查34、系统api实现数据库的增删改查&Sqlite3工具的使用35、数据库的事物36、listView入门37、采用layoutInflater打气筒创建一个view对象38、采用数据适配器ArryAdapter39、常用数据适配器simpleAdapter40、数据适配器总结41、内容提供者简介42、内容提供者的实现43、短信的备份44、插入一条记录到系统短信应用45、内容观察者46、获取系统的联系人信息47、保存联系人到系统通讯录48、读取联系人的一个小细节49、网络图片查看器50、anr产生的原理&如何避免51、android消息机制入门52、网络html查看器53、字符乱码问题的处理54、采用get方式提交数据到服务器55、采用post方式提交数据到服务器56、提交数据到服务器中文乱码问题的处理57、采用httpclient提交数据到服务器58、异步http框架简介&实现原理59、异步http框架提交数据到服务器60、上传文件到服务器61、smartimageview&常见开源代码62、多线程下载的原理63、多线程断点下载的原理64、多线程java代码移植到android65、多线程下载文本页面的更新66、显示意图激活另一个activity67、隐式意图激活另一个activity68、隐式意图的配置69、隐式意图和显示意图的使用场景70、在不同activity之间数据传递71、activity的声明周期72、activity的启动模式73、activity横竖屏切换的声明周期74、开启新的activity获取他的返回值75、请求码和结果码的作用76、利用广播实现ip拨号77、短信窃听器78、自定义广播时间&发送自定义广播&广播接受者优先级79、采用服务执行长期后台操作80、采用服务窃听电话&服务的声明周期81、android进程优先级&为什么使用服务82、绑定方式开启服务&调用服务的方法83、服务的声明周期(混合开启84、采用aidl绑定远程服务85、代码注册广播接受者&利用广播调用服务的办法86、加载大图片到内存87、获取图片exif信息88、从gallery获取图片89、图片画画板90、扒开美女衣服91、图片的缩放92、图片的旋转93、图片的平移&镜面&倒影效果94、图片的合成95、图片的颜色处理96、多媒体播放api简介97、人脸识别98、mediaplayer的生命周期99、soundpoo简介100、sufaceview的生命周期101、播放在线视频102、视频播放器进度的处理103、调用系统照相机拍照和录像104、采用camera拍照105、常见对话框106、notification入门107、菜单108、android下的样式109、android下的主题110、代码编写ui111、html创建ui112、帧动画113、代码创建创建的tween动画114、xml文件定义动画115、传感器简介116、117、杀死进程118、apk的安装119、应用程序的反编译120、动态创建fragment121、用fragment创建一个选项卡122、fragment的向下兼容性123、fragment的生命周期124、fragment之间的通讯125、应用程序国际化04、android的framewor简介Wap:wait and playWireless Makeup Language(WML)精简的html语言Applications:android自带的基本上层应用Aplication framework:应用程序框架Librarics:Linux lernel:05、两种虚拟机的比较编译后文件格式:jvm:.java->.class->.jardalvik vm:.java->.dex->.odex基于的架构:jvm:基于栈的架构dalvik vm:基于寄存器的架构Cpu直接访问寄存器因此dalvik虚拟机的效率比jvm高06、sdk的下载以及简介->获取sdk工具包(sdk:standard develope kits)->ADT(android develop tools,实际上是eclipse的插件)SDK具体内容Android->SDK Plateform:开发时使用到的jar包->Samples for sdk:->ARM EABI V7a System Image:模拟器运行时的镜像->Intel n86 Aton System:模拟器运行时的镜像->MIPS System Image:模拟器运行时的镜像->google APIs:google提供的jar包,可以直接使用google提供的一些API ->source for android SDK:SDK全部的源代码Extrals:->tools:开发的工具->support library:实现高版本的android向下的兼容->google Admed Ads SDK:gongle提供的广告插件->Analyties App Irackiong SDK:应用的用户分析->cloud message:云消息->gongle play service:收费服务->google USB Driver:真实的设备驱动开发时:基于4.0,兼容2.2、2.3.307、创建android模拟器avd:android virture developerVGA:480*640(电视的标准分辨率)QVGA:240*320(四分之一)HVGA:320*480(一半)WVGA:480*800(width)FWVGA:480*854(更宽)08、ddms简介ddms:模拟器不支持中文,因此发送中文会显示不出来09、platform-tools的简介及常见adb指令Android调试桥:内部实现就是socket让两个系统之间实现数据交互->reset adb:模拟器找不到时候可以重启->adb device:列出所有的连接的设备->adb kill-server:杀死adb调试桥->adb start-server 启动adb调试桥dx.bat:将.class文件打包10、android项目的目录结构一:SDK的目录结构->Samples->Api demo:根据API demo(模拟器上面可以看见)的效果可以在sample中看见相应的代码->Source:jar包所有的sdk源代码都在这个文件夹里->SystemImage:系统镜像->temp:下载更新临时存储的文件夹,一般是空的->tools:emulater.ext 不同版本的模拟器二:New Android Application->theme:留给以后作为扩展,现在并没有太大的作用->target SDK:一般选择高版本,因为高版本对下兼容->mark project as a library:一般不选择,意思是将这个项目提供一个jar包供别人使用三:文件夹目录.setting:设置目录assets:资产目录,存放一些文件,这些文件会被原封不动打包到应用程序的apk中bin:gen:自动生成的目录->builderConfig.java:生成的配置信息->R.java:Android 4.1.2->android.jar开发环境,jar包可以在properties中修改,jar包就是SDK011、Android下apk的安装过程一、Android安装过程分析:->setContentView:甚至view的对象,把里面的xml文件加载到->在project中选择build automaticly会自动把文件生成字节码文件,.class $代表的class文件生成的是内部类->dex.bat文件会把.class文件生成.dex文件->apk压缩文件解压内部内容->META-INF:应用程序的签名eclipse的调试签名文件->res:资源文件->classes.dex:class文件->resources.arsc:资源ID映射->android软件安装的过程:->拷贝xxx.apk带/data/app/xxx-1.apk->在/data/data目录下创建一个文件夹,文件夹名称当前应用程序的报名012、常见adb指令前提:->设备连接上电脑而且驱动安装正常,如果安装不正常的话,会有黄色的问号显示;->设备上打开USB调试;指令:->adb device(如果启动发现这个程序没有安装会自动安装)->adb kill-server->adb start-server->adb uninstall <包名>->adb -s emulator-5554 install c:\\users\\administrator\\hello.apk如果有多个设备的话,如果不指定安装的是哪个设备程序会报错->adb push haha.prop /sdcard/haha.txt 将文件移到(360管家,豌豆荚之类的软件他们也是用的adb指令,倘若电脑上装这些软件的话,会因为两个adb指令抢端口号而挂掉)(adb版本之间兼容不是很好,经常报错可以考虑下版本的问题)->adb shell:远程连接到了android的linux终端ls:显示文件夹ps:显示正在运行的程序ping:网络连通性013、创建模拟器遇到的常见错误->路径最好不要有中文:->应用安装不上,或者安装模拟器的时候开启一个新的模拟器:可能是模拟器的资源被占用,模拟器在运行的时候其实占用着硬盘上面的一个文件,这个文件位于工作空间.android/avd/iphone.avd 里面会有镜像文件,当一个模拟器开启起来了,就给你创建一个文件夹.knock的文件夹,代表着这个模拟器被锁定了,如果把模拟器关掉,就没有程序占据这几个镜像资源了,那么这几个程序就会被自动删除。
新版Android开发教程+笔记七--基础UI编程1
封面Android 基础UI编程1更改与显示文字标签TextView 标签的使用①导入TextV iew包import android.widget.TextView;②在mainActivity.java中声明一个TextViewprivate TextView mTextView01;③在main.xml中定义一个TextView<TextView android:text="TextView01"android:id="@+id/TextView01"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_x="61px"android:layout_y="69px"></TextView>④利用findView ById()方法获取main.xml中的TextViewmTextView01 = (TextView) findViewById(R.id.TextView01);⑤设置TextV iew标签内容String str_2 = "欢迎来到Android 的TextView 世界...";mTextView01.setText(str_2);⑥设置文本超级链接<TextViewandroid:id="@+id/TextView02"android:layout_width="wrap_content"android:layout_height="wrap_content"android:autoLink="all"android:text="请访问Android 开发者:/index.html"> </TextView>android.graphics.Color实践----Color颜色变幻android.graphics.Color包含颜色值Color.BLACK Color.BLUEColor.CY ANColor.DKGRAY Color.GRAYColor.GREEN Color.LTGRAY Color.MAGENTA Color.REDColor.TRANSPARENT Color.WHITE Color.YELLOW 黑色蓝色青绿色灰黑色灰色绿色浅灰色红紫色红色透明白色黄色编程实现颜色变幻①新建工程②修改mainActivity.java文件,添加12个TextV iew对象变量,一个LinearLayout对象变量、一个WC 整数变量、一个youtParams变量。
安卓中知识点总结
安卓中知识点总结作为一名Android开发者,了解和掌握Android开发的知识点是非常重要的。
本文将对Android开发涉及的各种知识点进行总结,包括Java语言基础、Android框架、界面设计、数据库操作、网络请求、性能优化等方面的知识点。
一、Java语言基础1. 类和对象类是Java语言中的基本概念,它是对象的模板。
对象是类的实例,是具体的实体。
了解类和对象的概念是Java编程的基础。
2. 继承和多态继承是Java语言中非常重要的特性,它使得子类可以继承父类的属性和方法。
多态是继承的延伸,它使得一个对象可以以多种形态出现,提高了程序的灵活性和扩展性。
3. 接口和抽象类接口和抽象类都是Java中用来实现多态和封装的机制,它们可以让程序员定义一个函数,并且由实现类来实现该函数的具体功能。
4. 异常处理异常处理是Java语言中的重要机制,在处理IO异常、运行时异常等方面都有着重要作用。
5. 泛型泛型是Java中的一个重要特性,它使得类或方法可以接受任意类型的数据作为参数,提高了代码的复用性和灵活性。
6. 并发并发是指在同一时间段内同时运行多个程序或多个线程。
在Android开发中,了解并发编程的知识点可以帮助我们编写高效的多线程应用。
7. I/O流I/O流是Java中用来进行输入输出操作的重要概念,了解文件操作、网络操作、序列化等知识点对Android开发非常重要。
二、Android框架1. ActivityActivity是Android应用的一个重要组件,它负责提供一个用户界面来展示和与用户交互。
了解Activity的生命周期、启动方式、传递数据等知识点是非常重要的。
2. FragmentFragment是Android中用来实现复杂界面的一种重要组件,它可以在一个Activity中管理多个界面碎片。
了解Fragment的生命周期、使用方式、通信方式等知识点是非常重要的。
3. ServiceService是Android中用来实现后台任务的一种组件,它可以在后台执行长时间运行的任务。
Android开发自学笔记(AndroidStudio)—4.1布局组件
Android开发⾃学笔记(AndroidStudio)—4.1布局组件⼀、引⾔Android的界⾯是有布局和组件协同完成的,布局好⽐是建筑⾥的框架,⽽组件则相当于建筑⾥的砖⽡。
组件按照布局的要求依次排列,就组成了⽤户所看见的界⾯。
在Android4.0之前,我们通常说Android开发五⼤布局和四⼤组件,这五⼤布局就是:1. LinearLayout 线性布局2. FrameLayout 单帧布局,也有中⽂翻译为帧布局、框架布局。
3. RelativeLayout 相对布局4. AbsoluteLayout 绝对布局5. TableLayout 表格布局⽽在Android4.0之后⼜新增了⼀种GridLayout⽹格布局。
⼆、LinearLayout线性布局线性布局是Android开发中最常见的⼀种布局⽅式,它是按照垂直或者⽔平⽅向来布局,通过“android:orientation”属性可以设置线性布局的⽅向。
属性值有垂直(vertical)和⽔平(horizontal)两种。
线性布局的排列在某⾏或者某列并不会⾃动换⾏或换列,就是说如果采⽤⽔平布局,控件宽度超过屏幕显⽰的话,后⾯的控件都将被隐藏,不会⾃动换⾏。
常⽤的属性有:1. android:orientation:可以设置布局的⽅向2. android:id - 为控件指定相应的ID3. android:text - 指定控件当中显⽰的⽂字,需要注意的是,这⾥尽量使⽤string.xml4. android:gravity - 指定控件的基本位置,⽐如说居中,居右等位置5. android:textSize - 指定控件当中字体的⼤⼩6. android:background - 指定控件所⽤的背景⾊,RGB命名法7. android:layout_width - 指定控件的宽度8. android:layout_height - 指定控件的⾼度9. android:layout_weight - 指定控件的占⽤⽐例10. android:padding - 指定控件的内边距,也就是说控件当中的内容11. android:sigleLine - 如果设置为真的话,则将控件的内容显⽰在⼀⾏当中layout_weight属性以控制各个控件在布局中的相对⼤⼩。
Android UI学习笔记
Android中的像素:(sp作为文字大小的单位,dp(dip)作为其他元素的单位)dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。
由此,根据google的建议,TextView的字号最好使用sp做单位,而且查看TextView的源码可知Android 默认使用sp作为字号单位。
在Android 中,1pt 大概等于2.22sp以上供参考,如果UI 能够以sp为单位提供设计是最好的,如果设计中没有sp的概念,则开发人员也可以通过适当的换算取近似值。
过去,程序员通常以像素为单位设计计算机用户界面。
例如,定义一个宽度为300像素的表单字段,列之间的间距为5个像素,图标大小为16×16像素等。
这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小。
在有些情况下,用户界面可能会小到难以看清内容。
与分辨率无关的度量单位可以解决这一问题。
Android支持下列所有单位。
px(像素):屏幕上的点。
in(英寸):长度单位。
mm(毫米):长度单位。
pt(磅):1/72英寸。
dp(与密度无关的像素):一种基于屏幕密度的抽象单位。
在每英寸160点的显示器上,1dp = 1px。
dip:与dp相同,多用于android/ophone示例中。
sp(与刻度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放。
为了使用户界面能够在现在和将来的显示器类型上正常显示,建议大家始终使用sp作为文字大小的单位,将dip作为其他元素的单位。
Android编程权威指南(第4版)
4.3进程销毁时保 存数据
4.5深入学习: Jetpack、
AndroidX与架构组
件
4.4 ViewModel与 保存实例状态
4.6深入学习:解 决问题要彻底
5.1异常与栈跟踪
5.2 Android特有的 调试工具
5.3挑战练习:探索 布局检查器
5.4挑战练习:探索 Android性能分析器
6.1创建第二个 activity
1
DragAndDraw
项目
2
30.2创建定制 视图
3
30.3处理触摸 事件
4 30.4
onDraw(Canv as)函数内的 图形绘制
5 30.5深入学习:
GestureDete ctor
30.7挑战练习:旋 转矩形框
30.6挑战练习:设 备旋转问题
30.8挑战练习:辅 助功能支持
31.2简单属性动画
der
25.10挑战练习: 观察视图
LifecycleOwner的 LiveData
25.12挑战练习: 预加载以及缓存
01
26.1搜索 Flickr网 站
02
26.2使用 SearchVi ew
03
26.3使用 sharedpr eference s实现轻量 级数据存储
04
26.4优化 应用
06
19.6处理 assets
4
19.7使用 assets
5
19.8绑定数据
19.9深入学习: 数据绑定再探
19.10深入学习: LiveData和数 据绑定
20.2访问Assets
20.1创建 SoundPool
20.3加载音频文件
1
android移动应用开发技术课第一章笔记
android移动应用开发技术课第一章笔记第一章:Android移动应用开发技术课笔记一、引言在当今移动互联网时代,Android系统以其开放性和普及率成为了最受欢迎的移动操作系统之一。
随着移动应用市场的不断扩大,对Android移动应用开发技术的需求也日益增加。
学习和掌握Android移动应用开发技术成为了越来越多人的选择。
二、Android移动应用开发技术概述1. 什么是Android?Android是一款基于Linux操作系统的开源移动设备操作系统,主要用于触摸屏移动设备,如智能手机和平板电脑。
Android操作系统的开放性使得开发者可以自由定制和开发应用,受到了广大用户的喜爱。
2. Android移动应用开发技术的重要性随着信息化和数字化的发展,移动应用成为了人们获取信息和进行交流的重要方式。
而Android作为最主流的移动操作系统之一,其应用的开发和推广具有巨大的市场潜力和商业价值。
掌握Android移动应用开发技术成为了许多开发者和从业者的追求目标。
三、学习Android移动应用开发技术的重要性1. 对于个人的意义学习Android移动应用开发技术可以提升个人的职业技能,并且在移动应用开发领域有更多的发展机会。
可以通过开发自己的应用来实现个人价值和创造财富。
2. 对于企业的意义随着移动互联网的发展,各类企业都希望拥有自己的移动应用,以提升品牌形象和服务用户。
懂得Android移动应用开发技术的人才对企业来说显得格外宝贵。
四、学习Android移动应用开发技术的途径1. 自学通过阅读相关书籍、网上教程和参加线上培训班,可以自学Android 移动应用开发技术。
这种方式需要具备较好的自学能力和毅力。
2. 参加培训班选择权威的培训机构进行系统的学习和培训,可以更快速、系统地学习Android移动应用开发技术。
五、Android移动应用开发技术的未来发展随着人工智能、物联网、区块链等技术的不断发展,Android移动应用开发技术也将不断拓展应用场景和技术深度。
AndroidUI界面编程概览
AndroidUI界面编程概览Android UI界面编程常用控件Android UI界面编程概览本文主要对Android UI 用户界面开放的一些基本概念,均不做深入讲解,但可以快速浏览Android开放经常涉及到的一些基本概念和要素。
一、界面元素1. 窗口:Activity应用程序中每个屏幕显示都通过继承和扩展基类Activity实现分类:基本Activity,带内容的Activity(如ListActivity)2. 对话框:Dialog一种显示于Activity之上的界面元素,由Activity管理,用于显示一些临时信息和功能,它比Activity开销小1) 常用对话框:AlertDialog:信息对话框DatePickerDialog,TimePickerDialog:时间日期选择对话框ProgressDialog:进度对话框还可以设置对话框内容为我们自定义的View2) 相关函数:onCreateDialog():创建对话框的实现showDialog():需要显示的时候调用onPrepareDialog():更改已有对话框时调用3. 菜单:Menu一种显示于Activity之上的界面元素,由Activity管理,用于提供用户一些额外的选项和设置1) 常用菜单:Options Menu:按Menu键时从屏幕底部滑出的菜单Context Menu:用户通过在按件上长按调出它Android UI界面编程常用控件Submenu:用于给菜单分类,可被添加到其它菜单上,不能添加到子菜单上2) 相关函数:onCreateOptionMenu():创建菜单(onCreateContextMenu…)onOptionsItemSelected():处理菜单项的单击事件onPrepareOptionsMenu():动态更新4. 可视化控件:ViewView是可视化控件的基类1) 常用控件:TextView, ImageViewButton, CheckBox, RadioButton, ImageButton, ToggleButtonAnalogClock, DigitalClockEditText, List…2) 数据绑定:adapteradapter将控件(如List, GridView)和复杂数据(如数据,键表)绑定起来5. 其它界面元素标题栏二、layout布局的实现设置控件在屏幕上如何排布1. LinearLayout:线性的布局方式最常用,上下或左右的添加控件2. GridView:网格布局控件按照顺序依次填到每个格子里就好了,使界面很整齐3. TableLayout:表格布局以行列形式管理子控件,每行为一个TableRow,TableRow可添加子控件4. AbsoluteLayout:绝对坐标布局可以让子元素指定准确的x/y坐标值,并显示在屏幕上。
Android+UI界面编程
Android UI界面编程简述ChateauAerlian布局菜单的生成对话框的生成UI事件处理在Android,有多种方法可以截取用户与应用程序之间的事件交互。
考虑到用户界面上的事件,可以通过用户操作的界面所对应的View对象来获取。
View类提供了相关的方法。
在构建界面布局时,会使用到View类,其中有一些公共的回调函数,对用户界面事件是有用的。
当对应的View 上有事件发生时,这些回调函数将被Android的Framework调用。
例如,一个View(属于一个Button)被触摸点击,onTouchEvent()方法将被调用。
为了去获取该事件,开发者必须扩展这个类,并且重载这个方法。
但是,扩展每一个View对象实例以便去获取事件,这样做是不实际的。
这就是为什么View类也包含一些嵌套的接口,该接口和回调函数一起使用,方便定义。
这些接口叫做事件监听,能通过他们来获取用户与界面的交互。
当经常地使用事件监听时,可能也会需要扩展一个View类,以便去构建一个用户自定义元素。
也许你希望去扩展一个Button类去做一些其他事情。
在该情况下,你将能够通过使用eventhandlers去定义缺省的事件行为。
事件监听一个事件监听是View类中的一个接口,其中包含一个单一的回调方法。
当View监听被注册并被用户操作所触发时,Android框架将调用这些方法。
OnClick()来自View.OnClickListener.,用户点击Item(Touch模式)、提起导航键、按下轨迹球、按下enter 键时触发。
OnLongClick()来自View.OnLongClickListener.,用户长按Item(Touch模式)、长按导航键、长按轨迹球、长按enter键。
OnFocueChange()来自View.OnFocusChangeListener.,用户使用轨迹球或者是导航键去移动光标。
OnKey()来自View.OnKeyListener,用户按下或者释放一个Key设备。
android基础UI控件学习总结
android基础UI控件学习总结⼀、基本控件介绍1、Android中所有控件的顶层基类view的常⽤属性:android:id设置控件的标识符号android:layout_width设置⼦组件的布局宽度android:layout_height设置⼦组件的布局⾼度android:background设置控件的背景⾊android:onClick设置控件的单击事件绑定监听器android:visibility设置控件是否可见android:alpha设置控件透明度(0-1之间的数值)android:padding设置⼦组件的内边距android:layout_margin设置⼦组件的外边距2、⽂本控件TextView常⽤属性:android:text:⽂本的内容android:textSize:⽂字的⼤⼩android:textColor:⽂本的颜⾊3、按钮控件Button常⽤属性:android:onClick设置控件的单击事件绑定监听器4、⽂本编辑控件EditText常⽤属性:android:hint输⼊提⽰android:textColorHint提⽰的颜⾊android:textColorHighlight选中字体的背景颜⾊android:inputType设置输⼊类型5、组合案例:登⼊界⾯1)xml布局⽂件<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:background="#44f"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="**账号登录"android:textColor="#ffffff"/></RelativeLayout><EditTextandroid:id="@+id/userName"android:layout_width="match_parent"android:layout_height="wrap_content"android:ems="18"android:inputType="textPersonName"android:hint="请输⼊⽤户名"android:layout_marginTop="30dp"android:layout_marginLeft="16dp"android:layout_marginRight="16dp"/><EditTextandroid:id="@+id/password"android:layout_width="match_parent"android:layout_height="wrap_content"android:ems="18"android:inputType="textPassword"android:hint="请输⼊密码"android:layout_marginTop="30dp"android:layout_marginLeft="16dp"android:layout_marginRight="16dp"/><Buttonandroid:id="@+id/login"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="登⼊"android:layout_marginTop="30dp"android:layout_marginLeft="16dp"android:layout_marginRight="16dp"/><TextViewandroid:id="@+id/con"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="2dp"android:textSize="30sp"android:layout_marginLeft="20dp"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="v-1.0-a"android:layout_marginTop="400dp"android:layout_marginLeft="180dp"/></LinearLayout>View Code2)逻辑代码package com.me.androidstudy;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import androidx.annotation.Nullable;public class Activity_ui_1 extends Activity {EditText userName,password;Button login;TextView con;//绑定控件public void initView(){userName = findViewById(erName);password = findViewById(R.id.password);login = findViewById(R.id.login);con = findViewById(R.id.con);}@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_ui_1);initView();login.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String userName_str = userName.getText().toString();String password_str = password.getText().toString();String str = "⽤户名:"+ userName_str+"\n"+"密码:"+password_str+"\n";con.setText(str);}});}}View Code3)测试6、复选框控件CheckBoxAndroid中checkbox默认为复选框,也就是多选,实现单选的话,可以让checkbox添加监听,当已经有⼀个点击了,点击另外⼀个的时候,修改默认的状态,实现单选。
Android UI基础知识
Android UI基础知识一、Android UI组件的概述在Android应用程序开发过程中,主要就是对界面UI的设计与控制,android中的UI 元素包括:Activity、View、ViewGroup和布局。
Activity不是View但是包括View,View是常说的“组件”或者“控件”。
1、View在Andorid应用程序中,UI元素称为View,它们都继承了android.view.View类。
View 有众多的子类,包括ViewGroup、基础控件、高级控件和布局。
基础控件主要包括:Button、ImageButton、ToggleButton、TextView、RadioButton、CheckBox、ImageView、ProgressBar、SeekBar等。
2、ViewGroupandroid.view.ViewGroup类是android.view.View重要的子类,ViewGroup类通常叫做“容器”,它就是由个控件组成的复杂控件,因为它也是View类的子类,所以本身也是控件。
ViewGroup是高级控件的和布局的父类,高级控件是和布局与基础控件一样都是不指具体那个类,而是一类容器的总称。
高级控件都直接或者间接的继承了android.view.ViewGroup类,常用的高级控件主要包括:AutoCompleteTextView、Spinner、ListView、GridView、Gallery等。
3、布局管理布局是指导把各个UI元素在手机屏幕上进行布置。
常用的布局包括以下几个:1)FrameLayout(框架布局),通常也叫做帧布局。
2)LinerLayout(线性布局),让所有的UI无成为单一方向的布局。
3)AbsoluteLayout(绝对布局),让所有的UI元素准确的(x ,y)坐标值进行放置。
4)RelativeLayout(相对布局),将子元素的放置位置与其它元素的位置相关放置。
Android教程04-用户界面
浙江大学计算机学院
ContextMenu菜单
ContextMenu(右键菜单)
context menu是跟某个具体的view绑定在一起,在 activity中用registerForContextMenu来为某个view 注册context menu。context menu在显示前都会调 用onCreateContextMenu来生成menu。 onContextItemSelected用来处理选中的菜单项。
HVGA-L:480x320横屏 HVGA-P:320x480竖屏(默认) QVGA-L:320x240横屏 QVGA-P:240x320竖屏 WVGA-L:800x480横屏
浙江大学计算机学院
UI用户界面设计:Icon设计
应用程序需要各种各样的图标尺寸和定位 Launcher icons要有多样化的形状和样式,但 又要形成统一的视觉风格,其尺寸和定位也用 统一:
<menu xmlns:android="/apk/res/android"> <item android:id="@+id/save" android:title="@string/save" /> <item android:id="@+id/cancel" android:title="@string/cancel"/> </menu>
浙江大学计算机学院
Submenu
Submenu(子菜单)
一个浮动菜单列表,通过在选项菜单或上下文菜单 选择菜单项显露出来。不支持嵌套子菜单。
浙江大学计算机学院
android UI笔记
ListViewListView根据Adapter的不同分为:ArrayAdapterSimpleAdapterSimpleCursorAdapterCustomAdapter自定义AdapterArrayAdapterpublic class MainActivity extends Activity {private static final String[] songArray = { "稳稳的幸福.mp3", "稳稳的幸福0.mp3","稳稳的幸福1.mp3" };private ListView mListView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);mListView = (ListView) findViewById(R.id.mListView);ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(this, yout.simple_list_item_1, songArray);mListView.setAdapter(mAdapter);mListView.setOnItemClickListener(new OnItemClickListener(){ @Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int index,long id) {Toast.makeText(MainActivity.this, songArray[index], Toast.LENGTH_SHORT).show();}});}}SimpleAdapterpublic class MainActivity extends Activity {private ArrayList companyList;private HashMap companyMap;private ListView mListView;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);companyList = new ArrayList();companyMap = new HashMap();mListView = (ListView)findViewById(R.id.mListView);companyMap.put("image", R.drawable.ic_launcher);companyMap.put("company", "中国人力资源网");companyMap.put("product", "HR人力资源管理软件");companyList.add(companyMap);companyMap = new HashMap();companyMap.put("image", R.drawable.ic_launcher);companyMap.put("company", "深圳华为软件有限公司");companyMap.put("product", "华为CC软件和移动应用软件");companyList.add(companyMap);companyMap = new HashMap();companyMap.put("image", R.drawable.ic_launcher);companyMap.put("company", "中兴通讯南研所");companyMap.put("product", "Zsmart BOSS业务运营管理系统");companyList.add(companyMap);SimpleAdapter companyAdapter = new SimpleAdapter(this, companyList,yout.item,new String[] { "image", "company", "product"}, new int[] {R.id.iconImageView, panyTextView,R.id.productTextView });mListView.setAdapter(companyAdapter);//ListView列表选择事件mListView.setOnItemSelectedListener(newAdapterView.OnItemSelectedListener() {public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {Map infoMap = (Map) parent.getSelectedItem();Toast.makeText(MainActivity.this,"Java语言开发:" + infoMap.get("product"),Toast.LENGTH_SHORT).show();}public void onNothingSelected(AdapterView<?> parent) {}});//ListView列表单击事件mListView.setOnItemClickListener(newAdapterView.OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view,int position, long id) {Map infoMap = (Map) companyList.get(position);Toast.makeText(MainActivity.this,(String) infoMap.get("company") + "开发"+ (String) infoMap.get("product"),Toast.LENGTH_SHORT).show();}});}}SimpleCursorAdapter自定义Adapter1.定义item布局<?xml version="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><ImageViewandroid:id="@+id/iconImageView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="0"/><TextViewandroid:id="@+id/companyTextView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="5dip"android:layout_weight="1"android:singleLine="true"/><TextViewandroid:id="@+id/productTextView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="5dip"android:layout_weight="2"android:singleLine="true"/><Buttonandroid:id="@+id/delButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="5dip"android:layout_weight="0"android:text="Delete"/></LinearLayout>2.定义ListView,实例化3.定义数据List<Map>4. 定义Adaptera. CustomerAdapter extends BaseAdapterb. public CusomerAdapter(Context context,List list)c. getCount,getItem,getItemIdd. getView加载item布局 LayoutInflater将item布局构造为一个View从View中取各个view,为各个view赋值返回ViewProgressBar SeekBar RatingBar Tab Toast NotificationAlertDialog PopupWindow Menu DatePicker TimePicker Theme Style1.AlertDialog.Builder builder = new AlertDialog.Builder;2.builder.setIcon | setTitle | setMessage | setView | setItems |setSingleChicon….set…Button(String,DialogInterface.onClickListener()).create().show();托管式的DialogshowDialog(int)onCreateDialog(int){if(int = 0){new AlertDialog}}自定义Dialog:Layout(view)LayoutInfaltermyViewtoast。
basic4android开发教程
basic4android开发教程翻译(一)建立模拟器和第一个Hello worlrd程序如果你还没有安装Basic4android和Java SDK,请先参照后面的链接里面的安装和配置方法:/forum/basic...droid-sdk.html在这个教程里面,我们将建立一个新的AVD(Android Virtual Device)并生成模拟器实例.然后我们将建立一个简单的程序,这个程序将显示一个简单的信息框,并写一个信息到日志里.你也可以通过IDE连接到一个真正的设备上:使用ADB连接你的设备使用B4A-Bridge连接你的设备常见的问题解决列在在本教程的后面.如果你碰见的问题没在列表或者无法解决的话,请与support@联系建立新的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 release1.5conflicts with default source release1.7"-当前Basic4android需要Java6来运行.并不支持Java7.但是在同一个计算机可以同时安装这两个版本.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 EditText1As 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 between1to99End 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文件时,最匹配设备的那个变体将会被载入.一般你需要两个变体:-320x480,scale=1(160dpi).这个是竖向的默认的比例.-480x320,scale=1(160dpi).横向的默认比例.好,重新打开设计器.载入Layout1文件.选择"New Variant"并选择480x320(第二个选项).选择模拟器,并通过按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移动开发学习笔记学习笔记
《Android移动开发学习笔记》学习笔记android:id="@+id/button1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="开始广播"/>定义广播组件(MyBroadcastReceiver)class MyBroadReceiver extends BroadcastReceiverMyBroadReceiver(){out.println("每次广播都会实例化一个新的广播进行操作设置闹钟服务一制作界面<TimePickerandroid:id="@+id/time"android:layout_width="match_parent"android:layout_height="104dp"/><TextViewandroid:id="@+id/msg"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="当前闹钟没有设置"/><Buttonandroid:id="@+id/set"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="设置闹钟"/><Buttonandroid:id="@+id/delete"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="删除闹钟"/>二定义闹钟的提示界面public class AlarmMessage extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);new AlertDialog.Builder(this).setIcon(R.drawable.ic_launcher).setTitle("闹钟时间已到").setMessage("时间响起,现在时间:"+new SimpleDateFormat("yyyy 年MM月dd日HH时mm分ss秒").format(new Date(System.currentTimeMillis()))).setPositiveButton("关闭",new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface arg0,int arg1){AlarmMessage.this.finish();}}).show();}}三定义闹钟广播public class MyAlarmReceiver extends BroadcastReceiver{}});set.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0){Intent intent=new Intent(MyAlarmActivity.this,MyAlarmReceiver.class);intent.setAction("");PendingIntent sender=PendingIntent.getBroadcast(MyAlarmActivity.this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);alarm.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),sender);msg.setText("闹钟响起的时间是:"+hourOfDay+"时"+minute+"分。
Android_4
Android和UI设计❝UI(User Interface)是介于用户与硬件而设计彼此之间互动沟通相关软件,目的在用户能够方便有效率地去操作硬件以达成双向之互动,完成希望借助硬件完成的工作。
用户接口定义广泛,包含了人机互动与图形用户接口,凡参与人类与机械的信息交流的领域都存在着用户接口。
❝编写UI的2种方式❝与主程序混合写在一起❝写在XML中:建议使用这种方式❝用于显示数据、图片或者其他信息的组件,叫做“View”Widget简介❝android.widget套件包含了许多视觉性的UI元素,可用来将操作界面展示在应用程序画面上。
❝要熟悉Android程序的开发,必须从widget套件着手,因此以android.widget套件的应用为中心。
TextView❝TextView是个基本常用的组件❝可使用XML来操作❝可使用程序代码中的Method方法来操作❝下列说明XML与Method相对应之属性功能❝格式为XML <-> Method❝android:autoLink <-> setAutoLinkMask(int)❝可让文字上的链接自动变成可点击的连接❝android:gravity <-> setGravity(int)❝设定文字在View中x轴和y轴相关数值❝android:height <-> setHeight(int)❝设定TextView的高度❝android:width <-> setWidth(int)❝设定TextView的宽度❝android:hint <-> setHint(int)❝当Text是空的时候,就会显示hint中的提示文字❝android:lines <-> setLines(int)❝设置TextView高度为几个Line的高度,值必须为整数型❝android:maxLength <-> setFilters(InputFilter)❝设定TextView文字的最大长度❝android:password <-> setTransformationMethod(Transformation)❝让Text显示成其他符号,常用于输入或显示密码时❝android:text <-> setText(CharSequence)❝显示的文字❝android:textStyle <-> setTypeface(Typeface)❝设定文字样式❝android:textColor <-> setTextColor(ColorStateList)❝设定文字的颜色❝android:textColorLink <-> setLinkTextColor(int)❝设定连结的颜色❝android:textSize <-> setTextSize(float)❝设定文字大小TextView – autoLink属性❝android:autoLink <-> setAutoLinkMask(int)❝none❝autoLink默认值❝all <-> Linkify.ALL❝目前所有连结种类❝email <-> Linkify. EMAIL_ADDRESSES❝Email连结❝phone <-> Linkify. PHONE_NUMBERS❝电话号码链接❝web <-> Linkify.WEB_URLS❝网址连结ImageButton❝ImageButton可以将图片当作button的背景❝利用此属性android:src="图片位置"RadioButton❝RadioButton为单选按钮❝若要做成有多选一这种功能时,则需将这些RadioButton放置一个<RadioGroup>中CheckBox❝CheckBox只有两种型态❝checked❝unchecked❝CheckBox可用在多项选择时ProgressBar❝ProgressBar可用于显示程序执行进度❝水平类型,可以确定进度的最大值和当前值❝圆形,小号❝圆形,中号❝圆形,大号Toast Notification❝Toast通知是一个在窗口弹出的信息,它只显示内容所需的空间且使用者当前活动仍然保持可见和可互动。
android学习----基础UI编程
WindowManager 接口
该接口用于与窗口管理器(Window Manager Service)交互。通过 Context.getSystemService(Context.WINDOW_SERVICE)可以获取到 WindowManager 的实例。
这个接口可以添加 view 到屏幕,也可以从屏幕删除 view。它面向的对象一端是屏幕,另一端就是 View 。 WindowManager 接口介绍 详见 :/s/blog_4b3c1f950100qd4d.html
关键点
requestWindowFeature 方法 它的功能是启用窗体的扩展特性。 Window 类 window 类:概括了 Android 窗口的基本属性和基本功能。 window 类 介绍:/s/blog_4b3c1f950100qd39.html youtParams 类 WindowManager 接口主要用于与 WindowManager(窗口管理服务)进行交互。 LayoutParams 是 WindowManager 接口里面的一个嵌套类,包含了一系列的布局属性。 WindowManager 接口 介绍:/s/blog_4b3c1f950100qd4d.html WindowManager(窗口管理服务)介绍:/s/blog_4b3c1f950100qe9m.html
2 标题、状态栏的隐藏
标题栏隐藏
在 Activity.setCurrentView();之前调用此方法 private void HideTitle() { // TODO Auto-generated method stub requestWindowFeature(Window.FEATURE_NO_TITLE); }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-----------------------------------Android编程基础
android:id="@+id/myButton1"
android:layout_width="105px"
android:layout_height="66px"
mImageView01.setImageDrawable(getResources().getDrawable(
R.drawable.right));
}
});
new
pprriivvaattee Button mButton02;
@Override
public void
public void
ppuubblliicc vvooiidd onCreate(Bundle savedInstanceState) {
③ 修改main.xml布局,添加UI元素
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget34"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="/apk/res/android"
><!--创建第一个ImageView (第二层图片)-->
<ImageView
android:id="@+id/myImageView1"
R.drawable.right));
3
----------------------- Page 4-----------------------
/** Called when the activity is first created. */
/* 声明Button、ImageView 对象*/
private
private
pprriivvaattee ImageView mImageView01;
AAnnddrrooiidd 基础UUII编程44
专业相框设计
ImageView 的堆叠应用
① 新建工程
② 准备三张png图片
left.png right.png photo.png
@Override
public void
public void
ppuubblliicc vvooiidd onClick(View v) {
/* 当启动后,ImageView 立刻换背景图*/
import
import
iimmppoorrtt android.widget.ImageView;
public class extends
public class extends
ppuubblliicc ccllaassss Ex_Ctrl_7 eexxtteennddss Activity {
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="0px"
android:layout_y="36px"
/>
<!--创建第二个ImageView (第一层图片)-->
R.drawable.left));
}
});
}
}
⑤ 结果
4
android:text="pic1"
android:layout_x="9px"
android:layout_y="356px"
/>
<!--创建第二个Button -->
<Button
android:id="@+id/myButton2"
<ImageView
android:id="@+id/myImageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="0px"
-----------------------------------Android编程基础
mImageView02.setImageDrawable(getResources().getDrawable(
R.drawable.photo));
----------------------- Page 1-----------------------
-----------------------------------Android编程基础
封面
1
android:layout_y="36px"
/>
<!--创建第一个Button -->
<Button
2
----------------------- Page 3-----------------------
left.png right.png photo.png
super
super
ssuuppeerr.onCreate(savedInstanceState);
setContentView(yout.main);
/* 取得Button、ImageView 对象*/
mButton02 = (Button) findViewById(R.id.myButton2);
/* 设置ImageView 背景图*/
mImageView01.setImageDrawable(getResources().getDrawable(
/>
</AbsoluteLayout>
④ 修改mainActppaacckkaaggee zyf.Ex_Ctrl_7;
import
import
iimmppoorrtt android.app.Activity;
new
mButton02.setOnClickListener(nneeww Button.OnClickListener() {
@Override
public void
mImageView01 = (ImageView) findViewById(R.id.myImageView1);
mImageView02 = (ImageView) findViewById(R.id.myImageView2);
mButton01 = (Button) findViewById(R.id.myButton1);
import
import
iimmppoorrtt android.os.Bundle;
import
import
iimmppoorrtt android.view.View;
import
import
iimmppoorrtt android.widget.Button;
/* 用OnClickListener 事件来启动*/
new
new
mButton01.setOnClickListener(nneeww Button.OnClickListener() {
android:layout_width="105px"
android:layout_height="66px"
android:text="pic2"
android:layout_x="179px"
android:layout_y="356px"
----------------------- Page 2-----------------------
-----------------------------------Android编程基础
Android UI 4
Android UI 4
private
private
pprriivvaattee ImageView mImageView02;
private
private
pprriivvaattee Button mButton01;
private
private
public void
ppuubblliicc vvooiidd onClick(View v) {
mImageView01.setImageDrawable(getResources().getDrawable(
----------------------- Page 5-----------------------
-----------------------------------Android编程基础
ImageButton的堆叠应用
① 新建项目
② 准备三张png图片