疯狂android资料:第二章android应用的界面编程.doc
《疯狂android资料:第二章android应用的界面编程.doc》由会员分享,可在线阅读,更多相关《疯狂android资料:第二章android应用的界面编程.doc(22页珍藏版)》请在咨信网上搜索。
1、2013年1月11日14:29:53第二章 android应用的界面编程2.1界面编程与视图组件2.1.1视图组件与容器组件Android应用的所有UI组件都继承了View类View类还有一个重要的子类:ViewGroup,但ViewGroup通常作为其他组件的容器使用Android的所有UI组件都是建立在View、ViewGroup基础之上的,android采用了“组合器”设计模式来设计View和ViewGroup:ViewGroup是View的子类,因此ViewGroup也是可被当成View使用。对于一个android应用的图形用户界面来说,ViewGroup作为容器来盛装其他组件,而Vi
2、ewGroup里除了可以包含普通View组件外,还可以再次包含ViewGroup组件View类的XML属性、相关方法和说明ViewGroup继承了View类,当然也可以当成普通View来使用,但是ViewGroup主要还是当成容器类使用。但由于ViewGroup是一个抽象类,因此实际使用通常总是使用ViewGroup的子类来作为容器。2.1.2使用XML布局文件控制UI界面2.1.3在代码中控制UI界面如果再代码中控制UI界面,那么所有的UI组件都将通过new关键字创建出来,然后以合适的方式“搭建”在一起即可。public class Test2_1 extends Activity /创建时
3、回调函数 Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); /创建一个线性布局管理器 LinearLayout layout=new LinearLayout(this); /设置该Activity显示layout super.setContentView(layout); layout.setOrientation(LinearLayout.VERTICAL); /创建一个TextView Button final TextView textView=new
4、 TextView(this); textView.setText(12345678); Button button=new Button(this); button.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); button.setText(按钮); layout.addView(textView); layout.addView(button); /为按钮绑定监听事件 button.setOnClickL
5、istener(new OnClickListener() public void onClick(View v) / TODO Auto-generated method stubtextView.setText(被点击了232345);); 2.1.4使用XML布局文件和Java代码混合控制UI界面把变化小、行为比较固定的组件放在XML布局文件中管理那些变化较多、行为控制比较复杂的组件则交给Java代码来管理public class Test2_2_1 extends Activity int image=new intR.drawable.fengjing01,R.drawable.fe
6、ngjing02,R.drawable.fengjing03,R.drawable.fengjing04,R.drawable.fengjing05,R.drawable.fengjing06,R.drawable.fengjing07,R.drawable.fengjing08,R.drawable.fengjing09,R.drawable.fengjing10,;int current=0; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setCon
7、tentView(R.layout.activity_test2_2_1); /获取布局容器 LinearLayout linearLayout=(LinearLayout)findViewById(R.id.root); /创建ImageView final ImageView imageView=new ImageView(this); imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.FILL_PARENT); lin
8、earLayout.addView(imageView); /初始化显示第一张 imageView.setImageResource(image0); imageView.setOnClickListener(new OnClickListener() public void onClick(View v) / TODO Auto-generated method stubif(current=9)current=-1;imageView.setImageResource(image+current);); 2.1.5开发自定义ViewView组件他只是一个矩形的空白区域,里面没有内容。当开发
9、者打算派生出自己的UI组件时,首先定义一个继承View基类的子类,然后重写View类的一个或多个方法,通常可以被用户重写的方法如下:-构造器:重写构造器是定制View的最基本方式,当Java代码创建一个View实例,或根据XML布局文件加载并构建界面时需要调用该构造器。-onFinishInflate():这是一个回调方法,当应用从XML布局文件加载该组件并利用它来构建界面之后,该方法就会被回调-onMeasure(int,int):调用该方法来检测View组件及它所包含的所有子组件的大小-onLayout(boolean,int,int,int,int):当该组件需要分配其子组件的位置、大小
10、时,该方法就会被回调-onSizeChanged(int,int,int,int):当该组件的大小被改变时回调该方法-onDraw(Canvas):当该组件将要绘制它的内容时回调该方法进行绘制-onKeyDown(int,KeyEvent):当某个键被按下时触发该方法-onKeyUp(int,KeyEvent):当松开某个键时触发该方法-onTrackballEvent(MotionEvent):当发生轨迹球事件时触发该方法-onTouchEvent(MotionEvent):当发生触摸屏事件时触发该方法-onWindowFocusChanged(boolean):当该组件得到、失去焦点时触发
11、该方法-onAttachedToWindow():当把该组件放入某个窗口时触发该方法-onDetachedFromWindow():当把该组件从某个窗口上分离时触发该方法-onWindowVisibilityChanged(int):当包含该组件的窗口的可见性发生改变时触发该方法以上方法,根据业务要求重写部分方法实例:跟随手指的小球:为了实现一个跟随手指的小球,开发自定义的UI组件,这个组件将会在指定位置绘制一个小球,这个位置可以动态改变。当手指移动,程序监听这个手机动作,并把手指动作的位置传入自定义的UI组件,并通知该组件重绘即可。public class DrawView extends
12、View public float currentx=40;public float currtney=50;public DrawView(Context context) super(context); SuppressLint(DrawAllocation)Overrideprotected void onDraw(Canvas canvas) / TODO Auto-generated method stubsuper.onDraw(canvas);/创建画笔Paint p=new Paint();/设置画笔的颜色p.setColor(Color.RED);/绘制一个小圆canvas.
13、drawCircle(currentx, currtney, 15,p);public class Test2_3 extends Activity Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_test2_1); LinearLayout linearLayout=(LinearLayout)findViewById(R.id.root); final DrawView drawView=
14、new DrawView(this);/设置自定义组件的最大宽度、高度 drawView.setMinimumWidth(300); drawView.setMinimumHeight(500);/绑定监听事件 drawView.setOnTouchListener(new OnTouchListener() public boolean onTouch(View v, MotionEvent event) / TODO Auto-generated method stubdrawView.currentx=event.getX();drawView.currtney=event.getY()
15、;drawView.invalidate();return true;); linearLayout.addView(drawView); 2.2布局管理器为了更好地管理android应用的用户界面的各组件,android提供了布局管理器。通过使用布局管理器,android应用的图形用户界面具有良好的平台无管性Android的布局管理器本身就是一个UI组件,所有的布局管理器都是ViewGroup的子类2.2.1线性布局线性布局由LinearLayout类来代表,它们都会将容器里的组件一个挨着一个地排列起来。LinearLayout不仅可以控制各组件横向排列,也可以控制各组件纵向排列(通过设置a
16、ndroid:orientation属性控制)LinearLayout的常用XML属性及相关方法android:gravity属性中多个属性之间用竖线隔开,但竖线前后千万不能出现空格设置布局管理器内组件的对齐方式(在布局的位置呈现方式)android:gravity=”bottom|center_horizontal”底部、居中对齐android:gravity=”right|center_vertical”居右、水平Android:orientation设置布局管理器内组件的排列方式(组件排列方式)horizontal水平排列vertical垂直排列、默认值2.2.2表格布局表格布局有Tab
17、leLayout多代表,表格布局采用行、列的形式来管理UI组件,TableLayout并不需要明确包含多少行、多少列,而是通过TableRow、其它组件来控制表格的行数和列数。每次向TableLayout中添加一个TableRow,该TableRow就是一个表格行,TableRow也是容器,因此她也可以不断地添加其它组件,没添加一个子组件该组件表格就增加一列。在表格布局中,列的宽度有该列中最宽的那个单元格决定,整个表格布局的宽度则取决于父容器的宽度(默认总是沾满父容器本身)在表格布局管理器中,可以为单位格设置如下三种行为方式:-Shrinkable:如果某列被设为Shrinkable,那么该列
18、的所有单元格的宽度可以被收缩,以保证该表格能适应父容器的宽度-Stretchable:如果某个列被设为Stretchable,那么该列的所有单元格的宽度可以被拉伸,以保证组件能完全填满表格空余空间-Collapsed:如果某列被设为Collapsed,那么该列的所有单元格会被隐藏TableLayout继承了LInearLayout,因此它完全可以支持LinearLayout所支持的全部XML属性,以及以下属性:2.2.3帧布局帧布局由FrameLayout所代表,FrameLayout直接继承了ViewGroup帧布局容器为每个加入其中的组件创建一个空白的区域(称为一帧),所有每个子组件占据一
19、帧,这些帧都会根据gravity属性执行自动对齐FrameLayout常用的XML属性及相关方法说明2013年1月14日10:09:132.2.4布局相对相对布局由RelativeLayout代表,相对布局容器子组件的位置总是相对兄弟组件、父容器来决定的,因此这种布局方式称为相对布局。如果A组件的位置是由B组件的位置来决定的,Android要求定义B组件,再定义A组件。RelativeLayout可支持的两个XML属性为了控制布局容器中各个子组件的布局分布,RelativeLayout提供了一个内部类:RelativeLayout.LayoutParam,该类提供了大量的XML属性来控制Rel
20、ativeLayout布局容器中子组件的布局分布。RelativeLayout.LayoutParams里只能设为true、false的XML属性如下:RelativeLayout.LayoutParams里只能设为boolean值的属性RelativeLayout.LayoutParams里属性值为其它UI组件的XML属性如下:2.2.5绝对布局绝对布局由AbsoluteLayout代表。就是android不提供任何布局控制,而是由开发人员自己通过X坐标、Y坐标来控制组件的位置。当使用AbsoluteLayout作为布局容器时,布局容器不再管理子组件的位置、大小-这些都需要开发人员自己控制。
21、2.3基本界面组件2.3.1文本框(TextView)与编辑框(EditText)的功能和用法从功能上来看,TextView其实就是一个文本编辑器,只是android关闭了它的文字编辑功能。如果开发者想要定义一个可以编辑内容的文本框,则可以使用它的子类:EditText。EditText允许用户编辑文本框中的内容。TextView派生出的子类TextView:CheckedTextView、EditText、Chronometer、Button、DigitalChockEditText子类:AutoCompleteTextView、ExtractEditTextAutoCompleteText
22、View子类:MultiAutoCompleteTextViewButton子类:CompoundButtonCompoundButton子类:CheckBox、Raidobutton、ToggleButtonTextView和EditText具有很多相似之处,它们之间最大区别在于TextView不允许用户编辑文本内容,而EditText则允许用户编辑文本内容。TextView的XML属性及相关方法的说明表中android:autoLink属性值是如下几个属性值的一个或几个,多个属性值之间用竖线隔开-nane:不设置任何超链接-web:(对应于Linkify.WEB_URLS):将文本中的UR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 疯狂 android 资料 第二 应用 界面 编程
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。