3.Android学习之常用UI组件(二)
目录
3.常用UI组件(二)
4.图像类组件
4-1.图像视图(ImageView)
4-2.网格视图(GridView)
5.列表类组件
5-1.下拉列表框(Spinner)
5-2.列表视图(ListView)
6.难点解答
6-1.设置图片按钮背景透明
6-2.普通按钮与图片按钮的区别
3.常用UI组件(二)
4.图像类组件
图像视图ImageView:用于显示图像的组件
网格视图GridView:用于按照行、列的方式来显示多个元素(如图片、文字等)的组件
4-1.图像视图(ImageView)
用于在屏幕中显示任何Drawable对象,通常用来显示图片。
在布局文件中添加图像视图,可以使用
注:在使用ImageView组件显示图像时,通常将要显示的图片放置在res\drawable或者res\mipmap目录中
ImageView组件支持的常用XML属性如表:
| XML 属性 | 描述 |
|---|---|
| android:adjustViewBounds | 设置ImageView组件是否调整自己的边界来保持所显示图片的长宽比 |
| android:maxHeight | 设置ImageView组件的最大高度,需要设置android:adjustViewBounds属性值为true,否则不起作用 |
| android:maxWidth | 设置ImageView组件的最大宽度,需要设置android:adjustViewBounds属性值为true,否则不起作用 |
| android:scaleType | 设置所显示的图片如何缩放或移动以适应ImageView的大小,其属性值可以是:matrix(使用matrix方式进行缩放)、fitXY(对图片横向、纵向独立缩放,使该图片完全适应于ImageView,图片的纵横比可能会改变)、fitStart(保持纵横比缩放图片,直到该图片能完全显示在ImageView中,缩放完成后该图片放在ImageView的左上角)、fitCenter(保持纵横比缩放图片,直到该图片能完全显示在ImageView中,缩放完成后该图片放在ImageView的中间)、fitEnd(保持纵横比缩放图片,直到该图片能完全显示在ImageView中,缩放完成后该图片放在ImageView的右下角)、center(把图片放在ImageView的中间,但不进行任何缩放)、centerCrop(保持纵横比缩放图片,使图片能完全覆盖ImageView)、centerInside(保持纵横比缩放图片,使ImageView能完全显示该图片) |
| android:src | 设置ImageView所显示的Drawable对象的ID,例如,设置保存在res\drawable目录下的名称为flower.jpg的图片,可以将属性值设为android:src="@drawable/flower" |
| android:tint | 为图片着色,其属性值可以是#rgb、#argb、#rrggbb或#aarrggbb表示的颜色值 |
例:

activity_main.xml
4-2.网格视图(GridView)
按照行、列分布的方式来显示多个组件,通常用于显示图片或图标等。
在使用网格视图时,需要在屏幕上添加GridView组件,通常在XML布局文件中使用
GridView组件支持的XML属性如表:
| XML 属性 | 描述 |
|---|---|
| android:columnWidth | 设置列的宽度 |
| android:gravity | 设置对齐方式 |
| android:horizontalSpacing | 设置各元素之间的水平距离 |
| android:numColumns | 设置列数,其属性值通常为大于1的值,如果只有1列,那么最好使用ListView实现 |
| android:stretchMode | 设置拉伸模式,其中属性值可以是none(不拉伸)、spacingWidth(仅拉伸元素之间的间距)、columnWidth(仅拉伸表格元素本身)或spacingWidthUniform(表格元素本身、元素之间的间距一起拉伸) |
| android:verticalSpacing | 设置各元素之间的垂直间距 |
注:在使用GridView组件时,通常使用Adapter类为GridView组件提供数据。
Adapter类是一个接口,代表适配器对象。它是组件与数据之间的桥梁,通过它可以处理数据并将其绑定到相应的组件上。它的常用实现类包括以下几个:
①ArrayAdapter:数组适配器,通常用于将数组的多个值包装成多个列表项,只能显示一行文字。
②SmipleAdapter:简单适配器,通常用于将List集合的多个值包装成多个列表项。可以自定义各种效果,功能强大。
③SimpleCursorAdapter:与SimpleAdapter类似,只不过它需要将Cursor(数据库的游标对象)的字段与组件ID对应,从而实现将数据库的内容以列表形式展示出来。
④BaseAdapter:是一个抽象类,继承它需要实现较多的方法,通常它可以对各列表项进行zuida-限度的定制,也具有很高的灵活性。
例:

activity_main.xml
MainActivity.java
package com.example.qqalbum;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridLayout;
import android.widget.GridView;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {//显示的图片资源ID的数组private Integer[] picture = {R.mipmap.img01,R.mipmap.img02,R.mipmap.img03,R.mipmap.img04,R.mipmap.img05,R.mipmap.img06,R.mipmap.img07,R.mipmap.img08,R.mipmap.img09,R.mipmap.img10,R.mipmap.img11,R.mipmap.img12,};
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取布局文件中的GridView组件GridView gridView=(GridView) findViewById(R.id.gv1);//调用ImageAdaptergridView.setAdapter(new ImageAdapter(this));}public class ImageAdapter extends BaseAdapter{//获取上下文private Context context;public ImageAdapter(Context c){context=c;}@Overridepublic int getCount() {//图片数组的长度return picture.length;}
@Overridepublic Object getItem(int i) {return null;}
@Overridepublic long getItemId(int i) {return 0;}
@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {ImageView imageView;//判断传过来的值是否为空if(view==null){//创建ImageView组件imageView=new ImageView(context);//为组件设置宽、高imageView.setLayoutParams(new ViewGroup.LayoutParams(260,240));//选择图片铺设方式imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);}else {imageView=(ImageView) view;}//将获取图片放到ImageView组件中imageView.setImageResource(picture[i]);//返回ImageViewreturn imageView;}}
}
5.列表类组件
下拉列表框Spinner:用于弹出一个下拉菜单供用户选择
列表视图ListView:用于实现在一个窗口中只显示一个列表
5-1.下拉列表框(Spinner)
用于提供一系列列表供用户进行选择。
通过
注:android:entries为可选属性,用于指定列表项,如果在布局文件中不指定该属性,可以在Java代码中通过为其指定适配器的方式指定;android:prompt属性也是可选属性,用于指定下拉列表框的标题。
例:

方法一:
activity_main.xml
values-arrays.xml
- 全部
- 电影/电视
- 图书
- 唱片
- 小事
- 用户
- 小组
- 群聊
- 游戏/应用
- 活动
MainActivity.java
package com.example.spinner;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取下拉列表Spinner spinner=(Spinner) findViewById(R.id.spinner);spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView> adapterView, View view, int i, long l) {//获取选择项的值String result=adapterView.getItemAtPosition(i).toString();//显示被选中的值Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();}
@Overridepublic void onNothingSelected(AdapterView> adapterView) {
}});}
}
方法二:
在使用下拉列表框时,如果不在布局文件中直接为其指定要显示的列表项,也可以通过为其指定适配器的方式指定。
package com.example.spinner;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取下拉列表框Spinner spinner=(Spinner) findViewById(R.id.spinner);String[] ctype=new String[]{"全部","电影","图书","唱片","小事","用户","小组","群聊","游戏","活动"};ArrayAdapter adapter=new ArrayAdapter(this, android.R.layout.simple_spinner_item,ctype);//为适配器设置列表框下拉时的选项样式adapter.setDropDownViewResource(android.R.layout.simple_spinner_item);//将适配器与下拉列表框关联spinner.setAdapter(adapter);//获取选中项的值spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView> adapterView, View view, int i, long l) {//获取选择项的值String result=adapterView.getItemAtPosition(i).toString();//显示被选中的值Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();}
@Overridepublic void onNothingSelected(AdapterView> adapterView) {
}});
}
}
5-2.列表视图(ListView)
以垂直列表的形式列出需要显示的列表项。
通过
ListView组件支持的常用XML属性如表:
| XML 属性 | 描述 |
|---|---|
| android:divider | 为列表视图设置分割条,既可以用颜色分隔,也可以用Drawable资源分隔 |
| android:dividerHeight | 设置分割条的高度 |
| android:entries | 通过数组资源为ListView指定列表项 |
| android:footerDividersEnabled | 设置是否在footer View(底部视图)之前绘制分割条,默认值为true,设置为false时,表示不绘制。使用该属性时,需要通过ListView组件提供的addFooterView()方法为ListView设置footer View |
| android:headerDividersEnabled | 设置是否在header View(头部视图)之前绘制分割条,默认值为true,设置为false时,表示不绘制。使用该属性时,需要通过ListView组件提供的addHeaderView()方法为ListView设置headerView |
在布局文件中添加一个列表视图,并通过数组资源为其设置列表项。具体代码如下:
在上面的代码中,使用了名称为“ctype”的数组资源,因此需要在res\values目录中创建一个定义数组资源的XML文件arrays.xml,并在该文件中添加名称为“ctype”的字符串数组,关键代码如下:
//将适配器与选择列表框关联- 情景模式
...- 连接功能
如:

注:在使用列表视图时, 重要的是如何设置选项内容, 同Spiner下拉列表框一样. 如果没有在布局文件中为ListView指定要足示的列表项,也可以通过为其设置Adiper来指定需要显示的列表项。通过Adpier来为ListView指定要是示的列表项,可以分为以下两个步骤。
(1) 创建Adapter对象。对于纯文字的列表项,通常使用ArayAdapter对象。创建ArayAdapter对象通常可以有两种方式:种是通过数组资源文件创建: 另种是通过在Java 文件中使用字符串数组创建。这与5-1 的Spinner下拉列表框中介绍的创建ArrayAdapter对象基本相同,所不同的就是在创建该对象时,指定列表项的外观形式。在Android API中默认提供了一些用于设置外观形式的布局文件,通过这些布局文件,可以很方便的指定ListView指定的外观形式。常用的布局文件有以下几个。
◆simple_list_ jitem_1: 每个列表项都是一个普通的文本。
◆simple_list._item_2:每个列表项都是一个普通的文本(字体略大) .
◆simple_list_item_checked: 每个列表项都有一个已选中的列表项。
◆simple_list_item_multiple_choice: 每个列表项都是带复选框的文本。
◆simple_list_item_single._choice 每个列表项都是带单选按钮的文本。
(2)将创建的适配器对象与ListViewv相关联,可以通过ListView对象的setAdapter()方法实现,具体代码如下:
listview. setAdapter(adapter);;//将适配器与ListView关联
例:

activity_main.xml
res-layout-main.xml
MainActivity.java
package com.example.wechatcontacts;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取列表视图ListView listView=(ListView) findViewById(R.id.listview);//定义并初始化保存图片id的数组int[] imageId=new int[]{R.mipmap.img01,R.mipmap.img02,R.mipmap.img03,R.mipmap.img04,R.mipmap.img05,R.mipmap.img06,R.mipmap.img07,R.mipmap.img08,R.mipmap.img09,};//定义并初始化保存列表项文字的数组String[] title=new String[]{"刘一","陈二","张三","李四","王五","赵六","孙七","周八","吴九"};//创建一个list集合List
6.难点解答
6-1.设置图片按钮背景透明
在使用图片按钮组件向界面中添加按钮时,如果图片无法拉伸填充到ImageButton里面。ImageButton 周围总是有一圈边框。这时,可以通过将图片按钮的背景设置为透明来解决这一问题。将图片按钮的背景设置为透明可以采用以下两种方法。
◆将android:background属性没置为0000或者@null。
◆通过android:background 属性指定所显示的图片,而不使用android:src属性。
例如,要在页面上添加一个“添加好友”图片按钮,可以使用下面的代码:
6-2.普通按钮与图片按钮的区别
普通按钮(Button) 和图片按钮(ImageButton) 组件,都可以在屏幕上生成一个可以单击的按钮,从而处理单击事件,那么在实际开发时应该如何选择?可以从以下两个方面来区别。
◆Button继承TextView,可以带有文字;而ImageButton继承ImageView,不能显示文本。
◆Button通过background属性设置背景图片,图片可能被拉伸,而ImageButton则通过src指定要显示的图片,图片本身多大就显示多大。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
