控件android3.1

android3.1  时间:2021-04-03  阅读:()
第3章Android控件进阶要设计出让用户喜欢的Android应用程序界面,除了需要用到在第2章讲的最基本的TextView、EditText和Button控件外,还要用到其他控件,如ImageButton控件、ImageView控件、RadioButton控件、CheckBox控件和ListView控件等.
本章主要讲解功能强大、应用广泛的一些控件.
3.
1ImageButton控件Android系统自带的除了在第2章中Button按钮外,还提供了带图表标的按钮ImageButton.
制作带图标的按钮,首先要在布局文件中定义ImageButton,然后通过以下几种方法设置要显示的图标.
方法一:在布局文件中就直接设置按钮的图标,如android:src="@drawable/图片地址及图片名"方法二:使用系统自带的图标,如ImageButton1.
ImageDrawable(getResources().
getDrawable(R.
drawable.
icon1);设置完按钮的图标,然后为按钮设置监听类setOnClickListener.
下面通过简单案例学习ImageButton控件以及其属性.
案例:使用ImageButton按钮设计一个界面,效果如图3-1所示.
图3-1ImageButton案例效果图案例分析:首先,在activity_main.
xml布局分件布局,添加一个TextView控件和ImageButton控件,并设置一些属性.
44Android应用开发完全学习手册然后,在MainActivity.
java文件中定义一个变量,通过findViewById得到ImageButton控件,并添件对应的监听事件.
实现步骤如下.
(1)创建一个Android工程,工程名为"ch03_buttonimages".
(2)在打开"PackageExplorer"窗口中的"ch03_buttonimages"项目中,打开res/layout/activity_main.
xml文件,修改代码并输入一些代码,代码清单如下.
代码清单:res/layout/activity_main.
xml(3)打开src/com.
example.
buttonimages/MainActivity.
java文件,修改代码并输入一些代码,代码清单如下.
代码清单:src/com.
example.
buttonimages/MainActivity.
javapackagecom.
example.
buttonimages;importandroid.
os.
Bundle;importandroid.
app.
Activity;importandroid.
view.
View;importandroid.
widget.
Button;importandroid.
widget.
ImageButton;importandroid.
widget.
TextView;publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.
onCreate(savedInstanceState);setContentView(R.
layout.
activity_main);setTitle("ImageButton");ImageButtonimgButton=(ImageButton)this.
findViewById(R.
id.
imageButton);//设置图片按钮的背景imgButton.
setBackgroundResource(R.
drawable.
buttonimage);//setOnClickListener()-响应图片按钮的鼠标单击事件imgButton.
setOnClickListener(newButton.
OnClickListener(){@Override45第章Android控件进阶3publicvoidonClick(Viewv){TextViewtxt=(TextView)MainActivity.
this.
findViewById(R.
id.
textView);txt.
setText(R.
id.
txtview);}});}}3.
2ImageView控件ImageView控件是Android中的基础图片显示控件,这也是布局中使用图片最常用的方式,可以使程序变得生动活泼,该控件有个重要的属性是ScaleType,该属性用以表示显示图片的方式,共有8种取值,如表3-1所示.
表3-1ScaleType的值ScaleType的值描述ScaleType.
CENTER图片大小为原始大小,如果图片大小大于ImageView控件,则截取图片中间部分,若小于,则直接将图片居中显示ScaleType.
CENTER_CROP将图片等比例缩放,让图像的短边与ImageView的边长度相同,即不能留有空白,缩放后截取中间部分进行显示ScaleType.
CENTER_INSIDE将图片大小大于ImageView的图片进行等比例缩小,直到整幅图能够居中显示在ImageView中,小于ImageView的图片不变,直接居中显示ScaleType.
FIT_CENTERImageView的默认状态,大图等比例缩小,使整幅图能够居中显示在ImageView中,小图等比例放大,同样要整体居中显示在ImageView中ScaleType.
FIT_END缩放方式同FIT_CENTER,只是将图片显示在右方或下方,而不是居中ScaleType.
FIT_START缩放方式同FIT_CENTER,只是将图片显示在左方或上方,而不是居中ScaleType.
FIT_XY将图片非等比例缩放到大小与ImageView相同ScaleType.
MATRIX是根据一个3*3的矩阵对其中图片进行缩放下面通过简单的案例学习ImageView控件及其属性.
案例:使用ImageView设计一个界面,效果如图3-2所示.
图3-2ImageView案例效果图46Android应用开发完全学习手册实现步骤如下.
(1)把图片导入到资源中:将图片拖曳到项目res\drawable开头的5个文件夹下,它们分别代表了高、中、低分辨度的图片.
Android读取图片时自动优化,选用合适的一个图片显示,比如,高分辨率可以存放128*128的图片,低分辨率可以存放32*32的图片.
(2)在string.
xml文件中输入需要显示的字符,打开res/layout/strings.
xml文件,修改并输入一些代码,代码清单如下.
代码清单:res/layout/strings.
xmlimageVSettingshello!
(3)在XML布局文件中添加ImageView控件,打开res/layout/activity_main.
xml文件,修改并输入一些代码,代码清单如下.
代码清单:res/layout/activity_main.
xml3.
3单选按钮与复选框单选框(RadioButton)、复选框(CheckBox)继承了Button类,因此可以直接使用Button支持的各种属性和方法.
RadioButton、CheckBox与普通按钮不同之处是多了一个可选中47第章Android控件进阶3的功能,因此有个额外的属性,android:checked属性,该属性用于指定它们初始时是否被选中.
3.
3.
1RadioGroup、RadioButton的用法RadioGroup是RadioButton的组.
每一组RadioGroup里至少包含两个RadioButton,包含多个单选按钮,但只能有一个RadioButton被选中,不同的组之间互不影响;每一组RadioGroup中都有一个默认的被选中的单选按钮,大部分情况下建议选择第一个为默认选择.
案例:使用RadioButton和RadioGroup设计一个界面,当选中某个单选框时,弹出相关的一段话,例如,当选中"海陆大餐(好吃真好吃)",弹出"「山珍海味」,乐不思蜀的人,为人海派,从不拖泥带水,拥有坚忍不拔的性格.
但是不够冷静、过度挥霍的结果,只怕会坐吃山空,不得不多加警惕"等语句,效果如图3-3所示.
图3-3单选按钮效果图实现步骤如下.
(1)新建一个Android应用程序.
(2)编写string.
xml文件,添加需要显示的字符,打开res/layout/strings.
xml文件,修改并添加一些代码,代码清单如下.
代码清单:res/layout/strings.
xml测试题Settings开心小测试48Android应用开发完全学习手册挑选的食物测试你的性格!
牛肉面(越辣越过瘾)海陆大餐(好吃真好吃)披萨(越脆越香)炸鸡块(多汁多滋味)(3)编写activity_main.
xml文件,添加一个RadioGroup标,在RadioGroup标签内添加四个RadioButton,打开res/layout/activity_main.
xml文件,修改并添加一些代码,代码清单如下.
代码清单:res/layout/activity_main.
xml(4)编写Activity,先声明6个全局变量,用于接收这6个控件对象,在onCreate()方法内,根据控件id获得这6个对象并赋给相应的变量,编写监听器,打开src/com.
example.
sumothers/MainActivity.
java文件,修改并添加一些代码,代码清单如下.
代码清单:src/com.
example.
sumothers/MainActivity.
javapackagecom.
example.
sumothers;importandroid.
app.
Activity;importandroid.
os.
Bundle;importandroid.
widget.
CheckBox;importandroid.
widget.
CompoundButton;importandroid.
widget.
CompoundButton.
OnCheckedChangeListener;importandroid.
widget.
RadioButton;importandroid.
widget.
RadioGroup;importandroid.
widget.
TextView;importandroid.
widget.
Toast;publicclassMainActivityextendsActivity{//定义各控件的变量privateTextViewwho=null;privateTextViewhow=null;privateRadioGroupceshi_group=null;privateRadioButtonniunan=null;privateRadioButtonhailu=null;privateRadioButtonpizza=null;privateRadioButtonzhaji=null;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.
onCreate(savedInstanceState);setContentView(R.
layout.
activity_main);//获得对应的控件who=(TextView)findViewById(R.
id.
who);ceshi_group=(RadioGroup)findViewById(R.
id.
ceshi_group);50Android应用开发完全学习手册niunan=(RadioButton)findViewById(R.
id.
niunan);hailu=(RadioButton)findViewById(R.
id.
hailu);pizza=(RadioButton)findViewById(R.
id.
pizza);zhaji=(RadioButton)findViewById(R.
id.
zhaji);//设置ceshi_group的监听器,其实是一句代码,其参数是一个带有重构函数的对象ceshi_group.
setOnCheckedChangeListener(newRadioGroup.
OnCheckedChangeListener(){publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){//TODOAuto-generatedmethodstubif(checkedId==niunan.
getId()){Toast.
makeText(MainActivity.
this,"吃辛辣食物的人,本身也很「辣」,性情孤傲,愤世嫉俗,对社交活动、对礼尚往来极端排斥,但对立大功、成大业,成为名流,永垂青史的英雄,欲意气风发、不落人后.
东北人多半具有如此的「风格」.
",Toast.
LENGTH_LONG).
show();}elseif(checkedId==hailu.
getId()){Toast.
makeText(MainActivity.
this,"「山珍海味」,乐不思蜀的人,为人海派,从不拖泥带水,拥有坚忍不拔的性格.
但是不够冷静、过度挥霍的结果,只怕会坐吃山空,不得不多加警惕",Toast.
LENGTH_LONG).
show();}elseif(checkedId==pizza.
getId()){Toast.
makeText(MainActivity.
this,"喜欢吃「薄饼」的人,为人也比较刻薄小气,在团体中属于叛逆的角色,有点自以为是.
但是,杰出的艺术家、科学家都具有此种「风格」.
",Toast.
LENGTH_LONG).
show();}elseif(checkedId==zhaji.
getId()){Toast.
makeText(MainActivity.
this,"這种人属于不爱动的后现代主义者,感情「脆」弱、深怕寂寞,举手投足像只小绵羊一般温驯,欠缺冲劲.
",Toast.
LENGTH_LONG).
show();}}});}}(5)运行程序,即可得到相应的效果.
知识点:(1)监听器实现的是RadioGroup.
OnCheckedChangeListener()提供的接口,需要重写里面的publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId)方法,该方法的第一个参数用来接收RadioGroup对象,第二个参数用来接收被选中的RadioButton的ID.
在这个方法中可以做一系列的判断和操作,如判断RadioButton的id是否等于checkedId,如果等于就使用Toast显示提示消息.
(2)Toast是Android中用来显示显示信息的一种机制,和Dialog不同的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失.
Toast的使用方法如下.
51第章Android控件进阶3①创建Toast对象.
makeText(Contextcontext,CharSequencetext,intduration);通过调用这个方法,返回一个Toast对象.
第一个参数是上下文对象,通常是用户的应用程序或Activity对象——类名.
this,第二个参数就是要显示的文本内容,可以格式化文本,第三个参数是持续多长时间来显示消息,有两个常量:LENGTH_SHORT或者LENGTH_LONG.
②调用show()方法显示.
Toasttoast=Toast.
makeText(RadioTest.
this,"female",Toast.
LENGTH_SHORT);toast.
show();将监听器绑定到RadioGroup上明确两点:a.
这里绑定监听器的是RadioGroup对象而不是RadioButton对象.
b.
这里的监听器实现的是RadioGroup.
OnCheckedChangeListener()提供的接口.
3.
3.
2CheckBox的用法复选框(CheckBox)是一种双状态的按钮,可以选中或不选中,能同时选择多个,每次单击时可以选择是否被选中,在UI中默认的是以矩形方式显示.
它不同于单选按钮(RadioButton),一个选项就一个CheckBox,两个选项就两个CheckBox.
对于事件监听它与RadioButton的监听是一样的,同样是通过CompoundButton.
OnCheckedChangeListener来监听的.
在Java文件中为每一个CheckBox都编写一个监听器,该监听器实现的是CompoundButton.
OnCheckedChangeListener()提供的接口,需要重写里面的publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked)方法,该方法的第一个参数用来接收CompoundButton对象,第二个参数是用来接收是否被选中,在该方法中可以做一系列的判断和操作,如判断某个CheckBox有没有被选中.
案例:使用RadioButton和RadioGroup、CheckBox设计一个界面,选中单选按钮显示选中的内容,选中多选按钮,也显示选中的内容,效果如图3-4所示.
图3-4单选、多选按钮效果图52Android应用开发完全学习手册实现步骤如下.
(1)编写string.
xml文件,添加需要显示的字符,打开res/layout/strings.
xml文件,修改并添加一些代码,代码清单如下.
代码清单:res/layout/strings.
xmlolympicGamesSettingsHelloworld!
Whowillbethenumberone中国美国其他HowmanygoldsmedalswillChinawin30以下30~3940~4950以上(2)编写activity_main.
xml文件,添加一个RadioGroup标,在RadioGroup标签内添加三个RadioButton,添加四个CheckBox,两个TextView,修改并添加一些代码,代码清单如下.
代码清单:res/layout/activity_main.
xml(3)编写Activity,先声明10个全局变量,用于接收这10个控件对象,在onCreate()方法内,根据控件id获得这10个对象并赋给相应的变量,编写监听器,打开src/com.
example.
54Android应用开发完全学习手册olympicgames/MainActivity.
java文件,修改并添加一些代码,代码清单如下.
代码清单:src/com.
example.
olympicgames/MainActivity.
javapackagecom.
example.
olympicgames;importandroid.
app.
Activity;importandroid.
os.
Bundle;importandroid.
widget.
CheckBox;importandroid.
widget.
CompoundButton;importandroid.
widget.
CompoundButton.
OnCheckedChangeListener;importandroid.
widget.
RadioButton;importandroid.
widget.
RadioGroup;importandroid.
widget.
TextView;importandroid.
widget.
Toast;publicclassMainActivityextendsActivity{//定义各控件的变量privateTextViewwho=null;privateTextViewhow=null;privateRadioGroupwho_group=null;privateRadioButtonchina=null;privateRadioButtonamerica=null;privateRadioButtonothers=null;privateCheckBoxless=null;privateCheckBoxthirty=null;privateCheckBoxforty=null;privateCheckBoxfifty=null;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.
onCreate(savedInstanceState);setContentView(R.
layout.
activity_main);//获得对应的控件who=(TextView)findViewById(R.
id.
who);how=(TextView)findViewById(R.
id.
how);who_group=(RadioGroup)findViewById(R.
id.
who_group);china=(RadioButton)findViewById(R.
id.
china);america=(RadioButton)findViewById(R.
id.
america);others=(RadioButton)findViewById(R.
id.
others);less=(CheckBox)findViewById(R.
id.
less);thirty=(CheckBox)findViewById(R.
id.
thirty);forty=(CheckBox)findViewById(R.
id.
forty);fifty=(CheckBox)findViewById(R.
id.
fifty);//设置who_group的监听器,其实是一句代码,其参数是一个带有重构函数的对象who_group.
setOnCheckedChangeListener(newRadioGroup.
OnCheckedChangeListener(){publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){//TODOAuto-generatedmethodstub55第章Android控件进阶3if(checkedId==china.
getId()){Toast.
makeText(MainActivity.
this,"中国",Toast.
LENGTH_SHORT).
show();}elseif(checkedId==america.
getId()){Toast.
makeText(MainActivity.
this,"美国",Toast.
LENGTH_SHORT).
show();}elseif(checkedId==others.
getId()){Toast.
makeText(MainActivity.
this,"其它国家",Toast.
LENGTH_SHORT).
show();}}});//下面为4个checkbox多选按钮分别建立监听器less.
setOnCheckedChangeListener(newOnCheckedChangeListener(){publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){//TODOAuto-generatedmethodstubif(isChecked){Toast.
makeText(MainActivity.
this,"30个以下",Toast.
LENGTH_SHORT).
show();}else{Toast.
makeText(MainActivity.
this,"不是30个以下",Toast.
LENGTH_SHORT).
show();}}});//下面为4个checkbox多选按钮分别建立监听器thirty.
setOnCheckedChangeListener(newCompoundButton.
OnCheckedChangeListener(){publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){//TODOAuto-generatedmethodstubif(isChecked){Toast.
makeText(MainActivity.
this,"30~39",Toast.
LENGTH_SHORT).
show();}else{Toast.
makeText(MainActivity.
this,"不是30~39",Toast.
LENGTH_SHORT).
show();}}56Android应用开发完全学习手册});//下面为4个checkbox多选按钮分别建立监听器forty.
setOnCheckedChangeListener(newOnCheckedChangeListener(){publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){//TODOAuto-generatedmethodstubif(isChecked){Toast.
makeText(MainActivity.
this,"40~49",Toast.
LENGTH_SHORT).
show();}else{Toast.
makeText(MainActivity.
this,"不是40~49",Toast.
LENGTH_SHORT).
show();}}});//下面为4个checkbox多选按钮分别建立监听器fifty.
setOnCheckedChangeListener(newOnCheckedChangeListener(){publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){//TODOAuto-generatedmethodstubif(isChecked){Toast.
makeText(MainActivity.
this,"50以上",Toast.
LENGTH_SHORT).
show();}else{Toast.
makeText(MainActivity.
this,"不是50以上",Toast.
LENGTH_SHORT).
show();}}});}}3.
4列表视图(ListView)ListView是Android软件开发中非常重要组件之一,它以列表形式展示具体内容(如联系人),并且能够根据数据的长度自适应显示,每个软件基本上都会使用ListView.
.
列表的显示需要如下三个元素.
(1)ListVeiw:用来展示列表的View.
(2)适配器:用来把数据映射到ListView上的中介.
一般有三种,ArrayAdapter、57第章Android控件进阶3SimpleAdapter和SimpleCursorAdapter,其中,以ArrayAdapter最为简单,只能展示一行字.
SimpleAdapter有最好的扩充性,可以自定义出各种效果.
SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来.
(3)数据:指具体的将被映射的字符串、图片、或者基本组件等.
3.
4.
1简单的ListView在List列表中可以直接用newArrayAdapter()绘制列表.
但如果列表中过于复杂,就需要使用自定义布局来实现List列表.
案例:使用List列表编写一个界面,当单击某条记录时,用Toast显示信息,如图3-5所示.
图3-5简单的listView效果图实现步骤:打开src/com.
example.
listview/MainActivity.
java文件,修改并添加一些代码,代码清单如下.
代码清单:src/com.
example.
listview/MainActivity.
javapackagecom.
example.
listview;importandroid.
os.
Bundle;importandroid.
app.
ListActivity;importandroid.
view.
Menu;importandroid.
view.
View;importandroid.
widget.
AdapterView;importandroid.
widget.
AdapterView.
OnItemClickListener;importandroid.
widget.
ArrayAdapter;importandroid.
widget.
ListView;importandroid.
widget.
Toast;publicclassMainActivityextendsListActivity{58Android应用开发完全学习手册privateString[]mListStr={"姓名:小王","性别:男","年龄:25","居住地:杭州","邮箱:miswang@gmail.
com","联系方式:157571885254"};ListViewmListView=null;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){mListView=getListView();setListAdapter(newArrayAdapter(this,android.
R.
layout.
simple_list_item_1,mListStr));mListView.
setOnItemClickListener(newOnItemClickListener(){@OverridepublicvoidonItemClick(AdapterViewadapterView,Viewview,intposition,longid){Toast.
makeText(MainActivity.
this,"您选择了"+mListStr[position],Toast.
LENGTH_SHORT).
show();}});super.
onCreate(savedInstanceState);}}3.
4.
2带标题的ListView列表使用simpleAdapter时注意要用Mapitem保存列表中每一项显示的title与text,使用newSimpleAdapter时将map中的数据写入,程序就会自动绘制列表了.
案例:编写一个带标题的listview列表,效果如图3-6所示.
图3-6带标题的listview效果图实现步骤:打开src/com.
example.
listviewother/MainActivity.
java文件,修改并添加一些代码,代码清单如下.
59第章Android控件进阶3代码清单:src/com.
example.
listviewother/MainActivity.
javapackagecom.
example.
listviewother;importjava.
util.
ArrayList;importjava.
util.
HashMap;importjava.
util.
Map;importandroid.
os.
Bundle;importandroid.
app.
Activity;importandroid.
view.
Menu;importandroid.
os.
Bundle;importandroid.
app.
ListActivity;importandroid.
view.
View;importandroid.
widget.
AdapterView;importandroid.
widget.
AdapterView.
OnItemClickListener;importandroid.
widget.
ArrayAdapter;importandroid.
widget.
ListView;importandroid.
widget.
SimpleAdapter;importandroid.
widget.
Toast;publicclassMainActivityextendsListActivity{privateString[]mListTitle={"姓名","性别","年龄","居住地","邮箱","手机号码"};privateString[]mListStr={"小胡","男","19","杭州","xiaohu@gmail.
com","157571885421"};ListViewmListView=null;ArrayList>mData=newArrayList>();;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){mListView=getListView();intlengh=mListTitle.
length;for(inti=0;iitem=newHashMap();item.
put("title",mListTitle[i]);item.
put("text",mListStr[i]);mData.
add(item);}SimpleAdapteradapter=newSimpleAdapter(this,mData,android.
R.
layout.
simple_list_item_2,newString[]{"title","text"},newint[]{android.
R.
id.
text1,android.
R.
id.
text2});setListAdapter(adapter);mListView.
setOnItemClickListener(newOnItemClickListener(){@OverridepublicvoidonItemClick(AdapterViewadapterView,Viewview,intposition,longid){Toast.
makeText(MainActivity.
this,"您选择了:"+mListTitle60Android应用开发完全学习手册[position]+"内容:"+mListStr[position],Toast.
LENGTH_LONG).
show();}});super.
onCreate(savedInstanceState);}}3.
4.
3带图片的ListView列表由于simpleAdapter类中的构造函数完成不了带图片的ListView列表的界面布局,所以必须自己写布局,使用Mapitem来保存列表中每一项需要的显示内容,如图片、标题、内容等.
案例:编写一个带图片的listview列表,效果如图3-7所示.
图3-7带图片的listview的效果图实现步骤如下.
(1)编写activity_main.
xml布局文件,添加一个ImageView控件,两个TextView控件,打开res/layout/activity_main.
xml文件,修改并添加一些代码,代码清单如下.
代码清单:res/layout/activity_main.
xml(2)打开src/com.
example.
listimage/MainActivity.
java文件,修改并添加一些代码,代码清单如下.
代码清单:src/com.
example.
listimage/MainActivity.
javapackagecom.
example.
listimage;importjava.
util.
ArrayList;importjava.
util.
HashMap;importjava.
util.
Map;importandroid.
os.
Bundle;importandroid.
app.
Activity;importandroid.
view.
Menu;importandroid.
os.
Bundle;importandroid.
app.
ListActivity;importandroid.
view.
View;importandroid.
widget.
AdapterView;importandroid.
widget.
AdapterView.
OnItemClickListener;importandroid.
widget.
ArrayAdapter;importandroid.
widget.
ListView;importandroid.
widget.
SimpleAdapter;importandroid.
widget.
Toast;publicclassMainActivityextendsListActivity{privateString[]mListTitle={"伽利略","培根","拜伦","狄更斯","马克思"};privateString[]mListStr={"生命有如铁砧,愈被敲打,愈能发出火花.
","瓜是长大在营养肥料里的最甜,天才是长在恶性土壤中的最好.
","悲观的人虽生犹死,乐观的人永生不老.
","顽强的毅力可以征服世界上任何一座高峰!
","生活就像海洋,只有意志坚强的人,才能到达彼岸.
"};ListViewmListView=null;ArrayList>mData=newArrayList>();62Android应用开发完全学习手册@OverrideprotectedvoidonCreate(BundlesavedInstanceState){mListView=getListView();intlengh=mListTitle.
length;for(inti=0;iitem=newHashMap();item.
put("image",R.
drawable.
one);item.
put("title",mListTitle[i]);item.
put("text",mListStr[i]);mData.
add(item);}SimpleAdapteradapter=newSimpleAdapter(this,mData,R.
layout.
activity_main,newString[]{"image","title","text"},newint[]{R.
id.
tupian,R.
id.
biaoti,R.
id.
wenzi});setListAdapter(adapter);mListView.
setOnItemClickListener(newOnItemClickListener(){@OverridepublicvoidonItemClick(AdapterViewadapterView,Viewview,intposition,longid){Toast.
makeText(MainActivity.
this,"您喜欢的名言:"+mListTitle[position]+"-"+mListStr[position],Toast.
LENGTH_SHORT).
show();}});super.
onCreate(savedInstanceState);}}3.
5网格视图(GridView)GridView是按照行列的方式来显示内容的,一般用于显示图片等内容,如实现九宫格图,用GridView是首选,也是最简单的,主要用于设置Adapter.
(1)Context:Context提供了关于应用环境全局信息的接口.
它是一个抽象类,它的执行被Android系统所提供.
它允许获取以应用为特征的资源和类型.
同时启动应用级的操作,如启动Activity、broadcasting和接收intents.
(2)publicvoidsetAdapter(ListAdapteradapter):设置GridView的数据,参数adapter为grid提供数据的适配器.
(3)publicViewgetView(intposition,ViewconvertView,ViewGroupparent)各参数的含义如下.
"position该视图在适配器数据中的位置.
"convertView旧视图.
"parent此视图最终会被附加到的父级视图.
(4)ImageView:显示任意图像,如图标.
ImageView类可以加载各种来源的图片(如资源或图片库),需要计算图像的尺寸,比便可以在其他布局中使用,并提供例如缩放和着63第章Android控件进阶3色(渲染)各种显示选项.
(5)publicvoidsetAdjustViewBounds(booleanadjustViewBounds).
当需要在ImageView调整边框保持可绘制对象的比例时,将该值设为真.
(6)publicvoidsetScaleType(ImageView.
ScaleTypescaleType).
控制图像应该如何缩放和移动,以使图像与ImageView一致.
参数scaleType是需要的缩放方式.
案例:使用GridView编写一个界面,如图3-8所示.
图3-8GridView效果图实现步骤如下.
(1)编写activity_main.
xml布局文件,添加一个GridView控件,打开res/layout/activity_main.
xml文件,修改并添加一些代码,代码清单如下.
代码清单:res/layout/activity_main.
xml(2)打开src/com.
example.
gridview/MainActivity.
java文件,修改并添加一些代码,代码清单如下.
代码清单:src/com.
example.
gridview/MainActivity.
javapackagecom.
example.
gridview;importandroid.
os.
Bundle;importandroid.
app.
Activity;64Android应用开发完全学习手册importandroid.
content.
Context;importandroid.
view.
Menu;importandroid.
view.
View;importandroid.
view.
ViewGroup;importandroid.
widget.
BaseAdapter;importandroid.
widget.
GridView;importandroid.
widget.
ImageView;publicclassMainActivityextendsActivity{privateGridViewgv;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.
onCreate(savedInstanceState);setContentView(R.
layout.
activity_main);gv=(GridView)findViewById(R.
id.
GridViewone);//设置GridView的列数gv.
setNumColumns(3);//为GridView设置适配器gv.
setAdapter(newMyAdapter(this));}////自定义适配器classMyAdapterextendsBaseAdapter{////图片ID数组privateInteger[]imgs={R.
drawable.
one,R.
drawable.
two,R.
drawable.
three,R.
drawable.
four,R.
drawable.
five,R.
drawable.
six,R.
drawable.
seven,R.
drawable.
eight,R.
drawable.
nine,};////上下文对象Contextcontext;//构造方法MyAdapter(Contextcontext){this.
context=context;}//获得数量publicintgetCount(){//TODOAuto-generatedmethodstubreturnimgs.
length;}//获得当前选项publicObjectgetItem(intposition){65第章Android控件进阶3//TODOAuto-generatedmethodstubreturnposition;}//获得当前选项IDpubliclonggetItemId(intposition){//TODOAuto-generatedmethodstubreturnposition;}//创建View方法publicViewgetView(intposition,ViewconvertView,ViewGroupparent){//TODOAuto-generatedmethodstubImageViewimageView;if(convertView==null){//实例化ImageView对象imageView=newImageView(context);//设置ImageView对象布局imageView.
setLayoutParams(newGridView.
LayoutParams(125,125));//设置边界对齐imageView.
setAdjustViewBounds(false);//设置刻度类型imageView.
setScaleType(ImageView.
ScaleType.
CENTER_CROP);//设置间距imageView.
setPadding(8,8,8,8);}else{imageView=(ImageView)convertView;}//为ImageView设置图片资源imageView.
setImageResource(imgs[position]);returnimageView;}}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
getMenuInflater().
inflate(R.
menu.
main,menu);returntrue;}}3.
6控件的综合应用案例案例描述:使用本章所学的常用控件编写一个注册界面,效果如图3-9所示.
案例分析:TextView、EditText、RadioButton、Button、ToggleButton、CheckBox、Spinner、imagebutton、imageview、Spinner等控件,采用的布局方式是相对布局.
66Android应用开发完全学习手册图3-9注册界面图实现步骤如下:打开res/layout/activity_main.
xml布局文件,修改并添加一些代码,代码清单如下.
代码清单:res/layout/activity_main.
xml70Android应用开发完全学习手册71第章Android控件进阶3(2)打开src/com.
example.
gridview/MainActivity.
java文件,实现Spinner控件的功能,修改并添加一些代码,代码清单如下.
代码清单:src/com.
example.
gridview/MainActivity.
javaimportandroid.
os.
Bundle;importandroid.
app.
Activity;importandroid.
view.
Menu;importandroid.
view.
View;importandroid.
widget.
ArrayAdapter;importandroid.
widget.
Spinner;importandroid.
widget.
Toast;publicclassMainActivityextendsActivity{privateSpinnerzwxz;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.
onCreate(savedInstanceState);setContentView(R.
layout.
activity_main);zwxz=(Spinner)findViewById(R.
id.
zwxz);String[]a={"CEO","CFO","PM"};ArrayAdapterA=newArrayAdapter(this,android.
R.
layout.
simple_spinner_item,a);zwxz.
setAdapter(A);}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
getMenuInflater().
inflate(R.
menu.
main,menu);returntrue;}}3.
7本章小结本章主要以案例形式讲述了ImageButton控件、ImageView控件、RadioButton控件、CheckBox控件、ListView控件和GridView控件的属性及如何使用,最后介绍了一个控件的综合应用案例.
对于初学者来说有一定帮助,请在开发工具中多调试本章的案例.

无忧云:洛阳/大连BGP云服务器38.4元/月,雅安物理机服务器315元/月起,香港荃湾CN2限时5折优惠

无忧云怎么样?无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点,目前商家开启了夏日清凉补贴活动,商家的机器还是非常...

HostKvm5.95美元起,香港、韩国可选

HostKvm发布了夏季特别促销活动,针对香港国际/韩国机房VPS主机提供7折优惠码,其他机房全场8折,优惠后2GB内存套餐月付仅5.95美元起。这是一家成立于2013年的国外主机服务商,主要提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。下面分享几款香港VPS和韩国VPS的配置和价格信息。...

天上云:香港大带宽物理机服务器572元;20Mbps带宽!三网CN2线路

天上云服务器怎么样?天上云是国人商家,成都天上云网络科技有限公司,专注于香港、美国海外云服务器的产品,有多年的运维维护经验。世界这么大 靠谱最重,我们7*24H为您提供服务,贴心售后服务,安心、省事儿、稳定、靠谱。目前,天上云香港大带宽物理机服务器572元;20Mbps带宽!三网CN2线路,香港沙田数据中心!点击进入:天上云官方网站地址香港沙田数据中心!线路说明 :去程中国电信CN2 +中国联通+...

android3.1为你推荐
摩根币摩根币是怎么骗人的?怎么查询商标怎样查询商标有没有被注册方法有哪些?地图应用什么地图导航最好用最准确同ip网站查询我的两个网站在同一个IP下,没被百度收录,用同IP站点查询工具查询时也找不到我的网站,是何原因?关键字什么叫关键词嘀动网手机一键通用来干嘛呢?杰景新特杰德特这个英雄怎么样www.765.com下载小说地址789se.com莫非现在的789mmm珍的com不管了www.se222se.com请问http://www.dibao222.com这个网是做什么
绍兴服务器租用 美国vps 免费试用vps 域名停靠一青草视频 virpus 美元争夺战 BWH sockscap 轻博 主机合租 cdn联盟 电信托管 美国独立日 台湾google 广州虚拟主机 酸酸乳 免备案cdn加速 阿里云邮箱个人版 hdroad 贵州电信 更多