1、 九、Android平台上的各种控件(View) Android的界面显示是基于控件的。通常是用View(包括ViewGroup)控件配上XML的样式来做的。1 概述Android控件体系分为三个类别:基本控件,容器,布局。这三类控件主要分布在两个包中:android.view提供抽象接口,android.widget提供系统内置的大部分控件。整个系统的控件都继承自android.view.View,而容器及布局类继承自android.view.ViewGroup。 基本控件主要包括ImageView、ProgressBar、CheckBox、TextView、EditText等。 容器这里的
2、容器是指采用了特定的布局并且提供了行为的控件,包括GridView、ListView、Spinner、Gallery等。 布局虽然布局跟容器均继承自android.view.ViewGroup,但并不像SWT那样提供了面板+布局的结构,而是每种Layout就是一种特殊的面板,包括FrameLayout、LinearLayout、RelativeLayout、AbsoluteLayout、TableLayout等。2 基本控件 EditText 主要方法: setText() 设置文本内容 getText() 获取文本内容 setHint() 设置缺省显示内容 RadioGroup,RadioB
3、utton 主要方法: RadioButton的isChecked() 判断Radiobutton是否被选中 getCheckedRadioButtonId() 获取选中RadioButon的ID addView() 添加一个指定布局参数的子视图 clearCheck() 清除选择 setOnCheckedChangeListener() 设置选中状态改变情况的监听 setOnHierarchyChangeListener() 设置子视图增加或删除的监听 CheckBox 主要方法: isChecked() 判断是否被选中 setOnCheckedChangeListener 监视选中状态改变
4、情况 ProgressBar 主要方法: setIndeterminate() 设置进度条是否自动运转 setProgressStyle() 设置显示风格 setProgress() 设置进度 setMax() 设置最大值 getProgress() 获取当前进度 SeekBar 主要方法: setMax() 设置最大值 getProgress() 获取当前值 setProgress() 设置值 监听器: setOnSeekBarChangeListener其下有三个方法 public void onProgressChanged(SeekBar arg0, int arg1, boolean
5、 arg2) /数值变更,arg1新值,是否Touch public void onStartTrackingTouch(SeekBar seekBar)/开始拖动 public void onStopTrackingTouch(SeekBar seekBar) /结束拖动 AutoCompleteTextView 主要方法: setAdapter() 设置数据adapter AutoCompleteTextView.setThreshold (int threshold) 设置输入多少个字符显示提示 MultiAutoCompleteTextView 允许输入多值,多值之间会自动地用指定的分
6、隔符分开 MultiAutoCompleteTextView.CommaTokenizer() 以逗号分隔 setTokenizer设置提示Tokenizer,缺省的为new clearListSelection() 清除选项 getDropDownBackground() 获取自动完成下拉列表的背景 getDropDownWidth() 取得自动下拉列表当前的宽度 setDropDownWidth() 设置自动下拉列表当前的宽度 setDropDownVerticalOffset() 设置自动下拉列表的垂直偏移量 getDropDownVerticalOffset() 取得自动下拉列表所使用
7、的垂直偏移量 DatePicker,TimePicker DatePicker init(int Year, int month, int day, new DatePicker.OnDateChangedListener() public void onDateChanged(DatePicker view, int year, int monthOfYear,int dayOfMonth) 设置初始显示日期 ) getYear()、getMonth()、getDayOfMonth() 获取设置值 TimePicker setCurrentHour (Integer currentHour)
8、、setCurrentMinuter (Integer currentHour) 设置值 setIs24HourView(Boolean) 设置是否为24小时制显示 setOnTimeChangedListener() 监听设置改变 获取系统当前时间和日期 Calendar.getInstance() 返回Calendar Calendar.get (int field) field 可以为Calendar.YEAR、Calendar.MONTH、 Calendar.DAY_OF_MONTH、Calendar.HOUR_OF_DAY、Calendar.MINUTE ImageView,Imag
9、eButton 主要方法: setImageResource() 设置显示图片 setAlpha() 设置Alpha invalidate() 强制更新 setScaleType(ScaleType st) 设置图片显示方式,st是一枚举 setAdjustViewBounds() 设置是否调整控件适应图片大小 setBackgroundResource() 设置背景 ImageSwitcher (显示一系列的图片,但当前只显示一张图片) 主要方法: setFactory(ViewSwitcher,ViewFactory factory) 设置要显示的数据 ViewFactory接口须实现方法
10、public View makeView() 负责提供当前显示的视图(ImageView), 且View必须为新实例 setImageResource() 设置当前显示的图片 getCurrentView() 返回当前显示的视图 setInAnimation(Animation ani) 设置视图载入时的动画效果 AnimationUtils.loadAnimation(Context context, int id) 获取动画效果 setOutAnimation(Animation ani) 设置视图载出时的动画效果 TextView 主要方法: getCurrentHintTextColo
11、r() 取得当前的提示文本颜色 getCurrentTextColor() 取得当前正常文本的颜色 getText() 取得显示的文本 setTextColor() 设置文本颜色 TableRow 主要方法: getVirtualChildAt() 取得指定索引的视图 getVirtualChildCount() 取得子试图数3 容器 GridView (表格显示一系列图片) 主要方法: setAdapter(ListAdapter adapter) 显示数据。 adapter可以继承自BaseAdapter,该类 public View getView(int position, View
12、convertView, ViewGroup parent) 返回当前选择的视图(ImageView)。 setSelection() 设置当前选中的视图 getSelectedView() 返回当前选中的视图 setNumColumns() 设置表格的列数 setColumnWidth() 设置表格列的宽度 ListView 主要方法: setAdapter(ListAdapter adapter) 显示数据 adapter可为new SimpleCursorAdapter/SimpleAdapter(Context context, int layout, Cursor c, String
13、 from, int to) layout 用来显示数据的模板 c 数据(可用ArrayList构造数据) from,to 用来显示对应列的空件id adapter.notifyDataSetChanged() 动态增删数据 setBackGroudRource() 设置背景色 getCheckItemIds() 返回选中项的ID的集合 getCheckedItemPosition() 返回当前选中项 getCheckedItemPositions() 返回list中选中项的集合 setSelection() 设置当前选中项 Spinner 显示数据 I 硬编码加载 通过setAdapter方
14、法设置类型为ArrayAdapter (Context context, int textViewResId, String objects) textViewResId:显示内容的viewID,默认设置为R.layout.simple_spinner_item objects: 显示的内容 II 从资源文件中加载 ArrayAdapter.createFromResource(Context context, int textArrayResId, int textViewResId) textArrayResId是资源ID 返回ArrayAdapter 设置下拉列表的风格(可选)adapt
15、er.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 监听选项选择变更事件 setOnItemSelectedListener() 设置监听 Spinner.OnItemSelectedListener类须实现以下两个方法: public void onItemSelected (AdapterView parent, View view, int position, long id) /view 选中项实例,position选择项在adapter中的位置 public void onNothing
16、Selected(AdapterView arg0) 设置选中项 Spinner.setSelection(position) /索引从0开始 获取选中项 getSelectedItemPosition() getSelectedItem() /该值toString()则为选中内容的字符串 getSelectedItemId() getSelectedView() Gallery (显示一系列的图片,提供拖动等特效) 主要方法: setAdapter(SpinnerAdapter adapter) 设置数据适配器 数据适配器可以继承自BaseAdapter,该类public View getV
17、iew(int position, View convertView, ViewGroup parent) 返回当前选择的视图(ImageView) setOnItemSelectedListener() 选项选中监听 setOnItemClickListener() 选项点击事件监听 setSpacing() 设置gallery中选项的间距 setSelection() 设置当前选中项 getSelectedItemPosition() 取得当前选中项4 布局 FrameLayoutFrameLayout是最简单的一个布局对象。它被定制为屏幕上的一个空白备用区域,之后可以在其中填充一个单一对
18、象,比如,一张要发布的图片。所有的子元素将会固定在屏幕的左上角,不能为FrameLayout中的子元素指定位置。后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部分或全部挡住(除非后一个子元素是透明的)。其中关键的是layout_gravity,负责控制控件的位置。 LinearLayoutLinearLayout以为它设置的垂直或水平的属性值,来排列所有的子元素。所有的子元素都被堆放在其它元素之后,因此一个垂直列表的每一行只会有一个元素,而不管他们有多宽,而一个水平列表将会只有一个行高(高度为最高子元素的高度加上边框高度)。LinearLayout保持子元素之间的间隔以及互相对齐(
19、相对一个元素的右对齐、中间对齐或者左对齐)。 LinearLayout 还支持为单独的子元素指定weight。好处就是允许子元素可以填充屏幕上的剩余空间。这也避免了在一个大屏幕中,一串小对象挤成一堆的情况,而是允许他们放大填充空白。子元素指定一个weight值,剩余的空间就会按这些子元素指定的weight比例分配给这些子元素,默认的weight值为0。例如,如果有三个文本框,其中两个指定了weight值为1,那么,这两个文本框将等比例地放大,并填满剩余的空间,而第三个文本框不会放大。在一个水平排列的LinearLayout中,各项按他们的文本基线进行排列(第一列第一行的元素,即最上或最左,被设
20、定为参考基线)。因此,在一个窗体中检索元素时,就不需要七上八下地读元素的文本了。我们可以在layout的XML中设置 android:baselineAligned = false,来关闭这个设置。主要属性: Orientation:指定控件的方向,horizontal(水平),vertical(垂直),在代码里可通过setOrientation()进行动态改变,值分别为HORIZONTAL、VERTICAL。 fill model:可分别使用android:layout_width和android:layout_height来指定宽度和高度。在指定宽度和高度时,可指定尺寸,如125px,也可
21、以使用“wrap_content”使控件根据内容来自适应或者使用“fill_parent”占满该控件所在容器的所有空间。 Weight:对应的设置为android:layout_weight。layout_weight 用于给一个线性布局中的诸多视图的重要度赋值。所有的视图都有一个layout_weight值,默认为零,意思是需要显示多大的视图就占据多大的屏幕空间。若赋一个高于零的值,则将父视图中的可用空间分割,分割大小具体取决于每一个视图的layout_weight值以及该值在当前屏幕布局的整体layout_weight值和在其它视图屏幕布局的layout_weight值中所占的比率而定。举
22、个例子:比如说我们在水平方向上有一个文本标签和两个文本编辑元素。该文本标签并无指定layout_weight值,所以它将占据需要提供的最少空间。如果两个文本编辑元素每一个的layout_weight值都设置为1,则两者平分在父视图布局剩余的宽度(因为我们声明这两者的重要度相等)。如果两个文本编辑元素其中第一个的layout_weight值设置为1,而第二个的设置为2, 则剩余空间的三分之二分给第一个,三分之一分给第二个(数值越小,重要度越高)。但是对于LinearLayout之间则以反比的形式显示在屏幕上(即数值越小,重要度越小) 。 Gravity:各个控件默认是left-and top-a
23、ligned的,但可通过对应的xml属性android:layout_gravity重新设置(在代码中可通过setGravity()进行设置)。 Padding:边距,可通过android:padding属性进行设置,4个方向的边距属性分别为android:paddingLeft, android:paddingRight, android:paddingTop, and android:paddingBottom。 RelativeLayout RelativeLayout是一个按照相对位置排列的布局,跟AbsoluteLayout这个绝对坐标布局是个相反的理解。使用RelativeLayo
24、ut布局的时候,最好在界面设计时做好布局,减少程序运行时做控件布局的更改,因为 RelativeLayout布局里面的属性之间,很容易冲突,例如,Layout below、Layout above同选 ID A,那就肯定发生冲突了。 RelativeLayout允许子元素指定他们相对于其它元素或父元素的位置(通过ID指定)。因此,可以以右对齐,或上下,或置于屏幕中央的形式来排列两个元素。元素按顺序排列,因此如果第一个元素在屏幕的中央,那么相对于这个元素的其它元素将以屏幕中央的相对位置来排列。如果使用XML来指定layout,在定义它之前,被关联的元素必须被定义。RelativeLayout参数
25、有width,height,below,alignTop,toLeft,padding和marginLeft。注意,这些参数中的一部分,其值是相对于其它子元素而言的。这些参数包括toLeft,alignTop和below,用来指定相对于其它元素的左,上和下的位置。主要属性: android:layout_alignParentTop 控件的顶部与容器的顶部对齐。 android:layout_alignParentBottom 控件的底部与容器的底部对齐。 android:layout_alignParentLeft 控件的左边与容器的左边对齐。 android:layout_alignPar
26、entRight 控件的右边与容器的右边对齐。 android:layout_centerHorizontal 控件水平方向在容器的中心。 android:layout_centerVertical 控件垂直方向在容器的中心。 android:layout_centerInParent 控件水平方向和垂直方向都在容器的中心。以上各属性的值都为布尔值类型,当需要引用另外一个控件的属性值时,可通过id/widget_a.property进行引用。 android:layout_above 表明该控件在属性中指定的控件的上方。 android:layout_below 表明该控件在属性中指定的控件的
27、下方。 android:layout_toLeft 表明该控件在属性中指定的控件的左边。 android:layout_toRight 表明该控件在属性中指定的控件的右边。 android:layout_alignTop 表明该控件的顶部与属性中指定的控件的顶部对齐。 android:layout_alignBottom 表明该控件的底部与属性中指定的控件的底部对齐。 android:layout_alignLeft 表明该控件的左边与属性中指定的控件的左边对齐。 android:layout_alignRight 表明该控件的右边与属性中指定的控件的右边对齐。 android:layout_
28、alignBaseline 表明这两个控件的底线是保持一致的。 AbsoluteLayout 这是一个按照绝对坐标定义的布局,由于使用绝对坐标去定位控件,因此要实现自适应界面时,应尽少使用AbsoluteLayout。AbsoluteLayout 里面的控件都以layout_x 、layout_y 来定义其位置。AbsoluteLayout可以让子元素指定准确的x/y坐标值,并显示在屏幕上。(0,0)为左上角,当向下或向右移动时,坐标值将变大。AbsoluteLayout没有页边框,允许元素之间互相重叠(尽管不推荐)。通常不推荐使用AbsoluteLayout,除非有正当理由要使用它,因为它使
29、界面代码太过刚性,以至于在不同的设备上可能不能很好地工作。 TableLayout TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但实际上,会经常在代码里使用TableLayout,例如做出表格的效果。TableLayout将子元素的位置分配到行或列中。TableLayout跟TableRow是一组搭配使用的布局,TableLayout置底,TableRow在TableLayout的上面,而TextView等控件就在TableRow之上。Android的一个TableLayout由许多TableRow组成,每个TableRow都会定义一个row。Table
30、Layout容器不会显示row、cloumns或cell的边框线。每个row拥有0个或多个的cell,每个cell拥有一个View对象。表格由列和行组成许多的单元格。表格允许单元格为空。单元格不能跨列,这与HTML中的不一样。列可以被隐藏,也可以被设置为伸展的从而填充可利用的屏幕空间,也可以被设置为强制列收缩直到表格匹配屏幕大小。另外,TableLayout之上也可以单独放控件。TableLayout经常用的属性是:android:collapseColumns:以第0行为序,隐藏指定的列。该属性为空时,则显示所有列,android:collapseColumns = 0,2,意思是把第0和第2列隐藏。android:shrinkColumns:以第0行为序,自动延伸指定的列填充可用部分。传奇辅助免费版下载,传奇辅助排行榜 wDCCl38QtsnX25东软集团股份有限公司 嵌入式 大连开发中心 开发三部