版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android用户界面(3)6.4 相对布局(P56)空间的位置描述为相对于父容器位置,或者相对于其他控件的位置。比如可以先指定一个控件 A 位于父容器中心,然后其他控件的位置可以指定为在 A 下方,和A 左对齐,或在A 右边,和A上对齐,等用作参照物的控件要先写相对布局(RelativeLayout)是一种非常灵活的布局方式,能够通过指定界面元素与其他元素的相对位置关系,确定界面中所有元素的布局位置特点:能够最大程度保证在各种屏幕类型的手机上正确显示界面布局6.4 相对布局控件常用属性(xml中使用):layout_centerHorizontal = “true” 在容器中水平居中layo
2、ut_centerVertical = “true” 在容器中垂直居中layout_alignParentLeft = “true”在容器中靠左边layout_alignParentTop = “true”在容器中靠上边.layout_toRightOf = “”id/view01“ 在 view01 的右边layout_toLeftOf = “”id/view01“ 在 view01 的左边android:layout_below=“id/view01”在 view01 的下边android:layout_alignLeft=“id/view01” 和 view01 左对齐android:l
3、ayout_above=“id/view01”在 view01 的上边.6.4 相对布局右图比课本上程序多加了:padding 是设置控件内部文字到边缘的距离,四个方向都一样。设置单个方向的,可以用 paddingLeft, paddingTop等。在java中用 setPadding或setPaddingLeft 等6.5 绝对布局内部的空间都具体指明了绝对位置(相对于布局左上角的坐标),程序适应性差7 界面控件Android系统的界面控件分为定制控件和系统控件定制控件是用户独立开发的控件,或通过继承并修改系统控件后所产生的新控件。能够为用户提供特殊的功能或与众不同的显示需求方式系统控件是A
4、ndroid系统提供给用户已经封装的界面控件。提供在应用程序开发过程中常见功能控件。系统控件更有利于帮助用户进行快速开发,同时能够使Android系统中应用程序的界面保持一致性常见的系统控件包括TextView、EditText、Button、ImageButton、Checkbox、RadioButton、Spinner、ListView和TabHost7.1 TextView和EditTextTextView是静态文本,也可以通过指定其 background 属性来指定背景图,或背景边框:android:background=drawable/icon“可以指定其 drawableLeft
5、或 drawableRight,drawableTop,drawBottom 等属性来在左右或上下显示图片。android:drawableLeft=drawable/icon”例子见 P64可以指定其 autoLink属性,使之成为一个链接(P62):android:autoLink = “email”android:autoLink = “web”7.2 TextView和EditTextEditText 是从TextView 派生而来的,用于输入文字。所以TextView能做的,EditText也能做,包括在左边显示图片等。常用属性(P61):android:selectAllOnFoc
6、us=“true” 获得输入焦点时,自动选中全部内容android:hint = “请输入姓名” 在空的编辑框中显示:“请输入姓名”android:password = “true” 密码方式显示输入的文字 android:phoneNumber = “true” 获得输入焦点时,自动弹出数字键盘7.2 TextView和EditTextandroid:text = “abcd” 开始时显示的文字程序中获取EditText中输入的文字的方法:EditText ed = (EditText)findViewById(R.id.xxx);String s = ed.getText().toStri
7、ng();程序中设置EditText中的文字的方法:ed.setText(“hello”);监听EditText中的输入 final txtView = (TextView)findViewById(R.id.xxx); editText = (EditText)findViewById(R.id.YYY); editText.addTextChangedListener(new TextWatcher() Override public void afterTextChanged(Editable s) Override public void beforeTextChanged(CharS
8、equence s, int start, int count, int after) Override public void onTextChanged(CharSequence s, int start, int before, int count) txtView.setText(s.toString(); /txtView内容总是保持和editText一致 );7.3 Button和ImageButtonImageButton上不能显示文字,但可以同时指定底图和底色src = “drawable/icon” 指定底图background = “#ffffff” 指定底色Button上
9、可以同时显示文字和图片,但是显示图片时,不能指定底色background = “drawable/icon” 指定底图text = “xxxx” 指定文字7.3 Button和ImageButton要使得按钮按下和弹起时图片不一样,需要使用背景选择器 selector (P66)参考阅读:/s/blog_4b93170a0100qhwa.htmldrawable 文件夹下 button_selector.xml (选择器器)内容:在Button中使用selector: android_background = “drawable/button_selector”在ImageButton中使用s
10、elector: android_src = “drawable/button_selector”在程序中指定按钮的文字和selector:btNormal.setText(“fdfasdfasdf”); /假设 btNormal是ButtonDrawable dr = getResources().getDrawable(R.drawable.button_selector);btNormal.setBackground(dr );ImageButton指定图片:imageButton.setImageResource(R.drawable.XXX);更多的selector的设置: 9Pat
11、ch图片作为按钮背景(P68)SDK 4.2 可以直接运行 draw9patch.exe,不用管 SwingWorker类参考阅读:/post/129.html7.4 RadioButton和CheckBoxCheckBox是一个同时可以选择多个选项的控件RadioButton则是仅可以选择一个选项的控件RadioGroup是RadioButton的承载体,程序运行时不可见,应用程序中可能包含一个或多个RadioGroup一个RadioGroup包含多个RadioButton,在每个RadioGroup中,用户仅能够选择其中一个RadioButton在xml文档中,将RadioButton放在
12、RadioGroup中,可以有多个RadioGroup,互不相关。CheckBox和RadioButton都是从 Button派生而来的,所以Button的所有属性和方法都适用于它们。它们都可以有一个 android:checked属性取值“true” 或“false” ,用来指明初始状态是否是选中的7.4 RadioButton和CheckBox在程序中获取是否选中的状态:radioButton.isChecked(); 返回值为 true或 falsecheckBox.isChecked(); 返回值为 true或 false在程序中改变选择状态:radioButton.setCheck(
13、true); /使其选中,false则使其不选中checkBox.setCheck(true); /使其选中,false则使其不选中RadioButton响应选择动作 RadioGroup rg = (RadioGroup)findViewById(R.id.XXX); rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() public void onCheckedChanged(RadioGroup group, int checkedId) /checkedId 即为被选中的那个 RadioButton
14、的 idif( checkedId = R.id.YYY ) /如果 R.id.YYY这个RadioButton被选中 );CheckBox 响应选择动作 CheckBox ck = (CheckBox )findViewById(R.id.XXX); ck.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener()public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) / isChecked代表被点击的CheckBox是否被选中
15、 /获取被点击的 CheckBox上的文字: String s = arg0.getText().toString(); );7.5 用同一个对象监听多个事件源class MyListener implements CheckBox.OnCheckedChangeListener public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) switch(buttonView.getId() case R.id.ckBurger:break;case R.id.ckCoke:Log.i(ee,buttonV
16、iew.getText().toString();break;case R.id.ckChips:break; /Log.i 可以在 LogCat的 info里输出调试信息7.5 用同一个对象监听多个事件源int CheckBoxIds = R.id.ckBurger, R.id.ckCoke, R.id.ckChips ;CheckBox ckBoxs = new CheckBox3;MyListener listener = new MyListener();for(int k = 0; k 3; +k) ckBoxsk = (CheckBox)findViewById(CheckBoxI
17、dsk); ckBoxsk.setOnCheckedChangeListener(listener);7.6 用Activity作为监听器监听多个对象要诀:要让Activity 实现监听接口,在事件响应函数里面,用事件源的getId 方法获得事件源的id,就能知道事件发生在哪里。public class Homework1Activity extends Activity implements Button.OnClickListener, RadioGroup.OnCheckedChangeListener, CheckBox.OnCheckedChangeListener public v
18、oid onCreate(Bundle savedInstanceState) . button1.setOnClickListener(this); button2.setOnClickListener(this); radioGroup1.setOnCheckedChangeListener(this); checkBox1.setOnCheckedChangeListener(this); checkBox2.setOnCheckedChangeListener(this); public void onClick(View arg0) /arg0是事件源switch(arg0.getI
19、d() case R.id.button1:break;case R.id.button2;break; public void onCheckedChanged(CompoundButton arg0, boolean arg1) switch(arg0.getId() case R.id.checkBox1:break;case R.id.checkBox2;break; 7.7 启动新Activity 并取得其运行结果在一个Activity中启动另一个Activity,不需要返回结果:Intent intent = new Intent();/* 指定intent要启动的类 */inte
20、nt.setClass(MainActivity.this, Activity1.class);startActivity(intent);上面代码出现在MainActivity的某个方法中,则能启动Activity1。MainActivity 也不会结束,而是被Activity1覆盖,Activity1运行结束则MainActivity重现。如果希望Activity1启动了MainActivity就结束,则加一条 :finish(); /结束当前Activity7.7 启动新Activity 并取得其运行结果2) 在一个Activity中启动另一个Activity,并要取得新Activity
21、运行的结果(如用户输入的字符串):Intent intent = new Intent();/* 指定intent要启动的类 */intent.setClass(MainActivity.this, Activity1.class);startActivityForResult(intent, XXXX);XXXX是个int 的变量或常量,用来代表所启动的Activity,相当于新Activity 的某种id要取得返回结果,则 MainActivity不能 finish()7.7 启动新Activity 并取得其运行结果然后,在 MainActivity中需要写 :protected void
22、 onActivityResult(int requestCode, int resultCode, Intent data)/新启动的Activity返回时,此方法被调用 super.onActivityResult(requestCode, resultCode, data); /如果可能启动多个Activity,可以用requestCode来判断是从哪个Activity返回的 if (requestCode = XXXX ) else if( requestCode = YYYY) 7.7 启动新Activity 并取得其运行结果新Activity结束时向启动它的Activity通过in
23、tent传递数据:Intent intent = new Intent();intent.putExtra(“dataId1”,”aaaaaa”); /”aaaaaa”是要传的数据,此项数据的id是 “dataId1”intent.putExtra(“dataid2,123456);/123456是要传的数据,此项数据的id是”dataid2”Intent.putExtra( .); /还可以传更多数据Intent.putExtra();setResult(9999, intent); /9999是返回结果,可以用于传递一个整数finish();7.7 启动新Activity 并取得其运行结果
24、老Activity获取新Activity传回的数据:protected void onActivityResult(int requestCode, int resultCode, Intent data) super.onActivityResult(requestCode, resultCode, data); if (requestCode = XXXX ) if( data != null ) String s = data.getStringExtra(“dataId1);int n = data.getIntExtra(“dataId2,-1);/s = “aaaaaa”, n =
25、 123456, resultCode = 9999 else /无返回值,比如在 Activity1中用户按了硬返回键 7.7 启动新Activity 并取得其运行结果Activity 一定要在 AndroidManifest.xml中声明,才能起作用,否则导致程序崩溃。 portrait: 规定界面必须是竖的landscape: 规定界面必须是横着的不指定 screenOrientation 则界面会自动调整横竖。7.8 状态开关按钮ToogleButton(P71)有开和关两种状态,可以分别对应于不同的文字关:开:7.8 状态开关按钮ToogleButton(P71)toggle.set
26、OnCheckedChangeListener(new ToggleButton.OnCheckedChangeListener() /响应点击事件Overridepublic void onCheckedChanged(CompoundButton arg0, boolean arg1)if(arg1) /状态是开/设置LinearLayout垂直布局test.setOrientation(1);else/设置LinearLayout水平布局test.setOrientation(0); );7.8 状态开关按钮ToogleButton(P71)程序中判断ToogleButton是否是开的:
27、 toggleButton.isChecked()7.9 图像视图 ImageView (P75)android:scaleType 属性 规定图片如何缩放或移动以适应 ImageView的大小 android:scaleType = “fitCenter” imgView.setScaleType(ImageView.ScaleType.FIT_CENTER) setImageBitmap 方法设置图片7.10 类似下拉列表框的Spinner控件其内容有两种生成方式1) 静态,在xml文件中指定 (P81)2) 在程序中动态指定7.10.1 用ArrayAdapter在程序中动态指定 spi
28、nner内容List list = new ArrayList();Spinner sp = (Spinner) findViewById(R.id.Spinner1);list.(“string1”); list.add(“string2”); list.add(“string3”);ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, list); /设置下拉列表的风格adapter.setDropDownViewResource(android.R.layout.simple
29、_spinner_item);/ android.R.layout.simple_spinner_dropdown_item 则选项上有/圆点sp.setAdapter(adapter);/list中的项目成为sp中的选项7.10.2 Spinner响应选择事件spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() Overridepublic void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) /An Adap
30、terView is a view whose children are determined by an Adapter. Spinner 是AdapterView模版类的派生类 / arg0是事件源 arg2 是被选中项的位置(从0开始), arg3 是其idtxtResult.setText(TextView)arg1).getText() + , + String.valueOf(arg2) + , + String.valueOf(arg3);Overridepublic void onNothingSelected(AdapterView arg0) );7.10.3 修改Spin
31、ner的内容通过修改 Spinner的数据源,来修改Spinner中显示的选项List list = new ArrayList();Spinner sp = (Spinner) findViewById(R.id.Spinner1);ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, list);sp.setAdapter(adapter);/list中的项目成为sp中的选项adapter.addItem(“abc”); /将选项“abc”添加进spinnerint c = sp.getCount(); /取选项数目for( int i = 0;i c; + i ) /在每个项目的文字末尾加 “_0”list.set(i, list.get(i) + _0); adapter.notifyDataSetChanged(); /通知sp,数据已改,应刷新m7.10.4 其他Spinner方法 String s = (String)sp.getIt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 珍爱生命从安全开始
- 高中语文7玄黑结婚课件苏教版必修
- 高二化学家用燃料更新
- 安全教育知识读本课程-教案
- Windows Server网络管理项目教程(Windows Server 2022)(微课版)教案1 部署虚拟环境安装Windows Server 2022操作系统
- 八年级英语上英语课外阅读拓展训练四(时文)无答案
- 高中物理第四章牛顿运动定律3牛顿第二定律课件新人教版必修
- 2014-2020年磷酸氢钙行业现状分析及风险投资报告
- 2024至2030年中国手机维修专用系统行业投资前景及策略咨询研究报告
- 2024至2030年中国异形金属天花板数据监测研究报告
- 如何提升小学生的词汇量
- 2024年插花花艺师培训考试题库(含答案)
- 慢阻肺健康宣教小讲课内容
- 中职教育历史《晚清时期的民族危机与救亡运动》课件
- 垃圾分类对促进农村环境整治的助推
- 煤矿井下机械设备维修及常见故障处理培训课件
- 校园文化建设可行性方案
- 2024年医院肝胆外科实习生带教计划
- 基层卫生全科医学知识考试题库单选题
- 常州高级中学2022~2023学年高一上学期期中质量检查化学试题(原卷版)
- 互助保障培训课件
评论
0/150
提交评论