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)

用于提供一系列列表供用户进行选择。

通过在XML布局文件中添加下拉列表框的基本语法格式如下:


注: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)

以垂直列表的形式列出需要显示的列表项。

通过在XML布局文件中添加列表视图的基本语法格式如下:


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> listItems=new ArrayList>();//通过for循环将图片id和列表项文字放到Map中,并添加到List集合中for (int i=0;i map=new HashMap();map.put("image",imageId[i]);map.put("名字",title[i]);//将map对象添加到List集合中listItems.add(map);}//创建SimpleAdapterSimpleAdapter adapter=new SimpleAdapter(this,listItems,R.layout.main,new String[]{"名字","image"},new int[]{R.id.title,R.id.image});//将适配器与ListView关联listView.setAdapter(adapter);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView adapterView, View view, int i, long l) {//获取选择项的值Map map=(Map) adapterView.getItemAtPosition(i);Toast.makeText(MainActivity.this, map.get("名字").toString(), Toast.LENGTH_SHORT).show();
​}});}
}

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指定要显示的图片,图片本身多大就显示多大。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部