控件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控件的属性及如何使用,最后介绍了一个控件的综合应用案例.
对于初学者来说有一定帮助,请在开发工具中多调试本章的案例.

HyperVMart:加拿大vps,2核/3G/25G NVMe/G口不限流量/季付$10.97,免费Windows系统

hypervmart怎么样?hypervmart是一家成立了很多年的英国主机商家,上一次分享他家还是在2年前,商家销售虚拟主机、独立服务器和VPS,VPS采用Hyper-V虚拟架构,这一点从他家的域名上也可以看出来。目前商家针对VPS有一个75折的优惠,而且VPS显示的地区为加拿大,但是商家提供的测速地址为荷兰和英国,他家的优势就是给到G口不限流量,硬盘为NVMe固态硬盘,这个配置用来跑跑数据非常...

Sharktech:美国/荷兰独立服务器,10Gbps端口/不限流量/免费DDoS防护60G,319美元/月起

sharktech怎么样?sharktech (鲨鱼机房)是一家成立于 2003 年的知名美国老牌主机商,又称鲨鱼机房或者SK 机房,一直主打高防系列产品,提供独立服务器租用业务和 VPS 主机,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹,所有产品均提供 DDoS 防护。此文只整理他们家10Gbps专用服务器,此外该系列所有服务器都受到高达 60Gbps(可升级到 100Gbps)的保护。...

香港云服务器 1核 256M 19.9元/月 Mineserver Ltd

Mineserver(ASN142586|UK CompanyNumber 1351696),已经成立一年半。主营香港日本机房的VPS、物理服务器业务。Telegram群组: @mineserver1 | Discord群组: https://discord.gg/MTB8ww9GEA7折循环优惠:JP30(JPCN2宣布产品可以使用)8折循环优惠:CMI20(仅1024M以上套餐可以使用)9折循...

android3.1为你推荐
留学生认证留学生回国学历认证 需要带什么材料百度关键词价格查询百度推广关键词怎么扣费?陈嘉垣马德钟狼吻案事件是怎么回事51sese.com谁有免费看电影的网站?www.gegeshe.com有什么好听的流行歌曲抓站工具抓鸡要什么工具?javbibi日文里的bibi是什么意思ww.66bobo.com这个WWW ̄7222hh ̄com是不是真的不太易开了,换了吗?555sss.com拜求:http://www.jjj555.com/这个网站是用的什么程序javlibrary.comImage Library Sell Photos Digital Photos Photo Sharing Photo Restoration Digital Photos Photo Albums
100m虚拟主机 香港服务器租用99idc 便宜vps 个人域名备案 过期已备案域名 raksmart 香港服务器99idc 国内永久免费云服务器 koss web服务器架设 softbank邮箱 idc资讯 空间技术网 吉林铁通 ca187 卡巴斯基免费试用版 跟踪路由命令 空间首页登陆 google台湾 腾讯总部在哪 更多