Android的常用基本控件ImageView、ListView
常用的基本控件
CheckBox
CheckBox是android复选框控件,每一个CheckBox都是独立的,都要有自己的id。
常用的属性与上一篇中博客写的RadioButton基本相同。
ImageView
常用的属性
android:src 设置要展示的图片(图片不会被拉伸)
android:background 设置背景图片(图片会被拉伸)
android:alpha 设置展示图片的透明度
android:tint 将图片渲染成指定的颜色
android:scaleType=”matrix” 用矩阵来绘图
android:scaleType=”fitXY” 不按比例拉伸图片来填充view的长宽
android:scaleType=”fitStart” 按比例拉伸图片,拉伸后图片的宽度为View的宽度,且显示在View的左边
android:scaleType=”fitCenter” 按比例拉伸图片,拉伸后图片的宽度为View的宽度,且显示在View的中间
android:scaleType=”fitEnd” 按比例拉伸图片,拉伸后图片的宽度为View的宽度,且显示在View的右边
android:scaleType=”center” 按原图大小显示图片,但图片长宽大于View的长宽时,截图图片中间部分显示
android:scaleType=”centerCrop” 按 按比例扩大图片的size居中显示,使得图片长或宽等于或大于View的长或宽
android:scaleType=”centerInside” 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长或宽等于或小于View的长或宽
注意:以上属性都可以在代码中用方法实现。
代码示例
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="爱好" /> <CheckBox android:id="@+id/check_basketball" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="篮球" /> <CheckBox android:id="@+id/check_football" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="足球" /> <CheckBox android:id="@+id/check_swim" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="游泳" /> </LinearLayout> <Button android:id="@+id/button_register" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="提交注册"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/edittext_password" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:hint="请输入密码" android:inputType="textPassword" /> <CheckBox android:id="@+id/check_isshow" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="显示密码" /> </LinearLayout> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/boygirl" android:background="@drawable/weimei" android:scaleType="center"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/button_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="增加透明度"/> <Button android:id="@+id/button_minus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="减小透明度"/> </LinearLayout></LinearLayout>
MainActivity.java
import java.util.ArrayList;import android.os.Build;import android.os.Bundle;import android.text.method.HideReturnsTransformationMethod;import android.text.method.PasswordTransformationMethod;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.EditText;import android.widget.ImageView;import android.annotation.TargetApi;import android.app.Activity;public class MainActivity extends Activity implements OnClickListener { private CheckBox checkIsshow; private EditText edittext; private Button button_register; private CheckBox checkBasketball; private CheckBox checkFootball; private CheckBox checkSwim; private Button btn_add; private Button btn_minus; private ImageView image; private int alpha; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); checkBasketball = (CheckBox) findViewById(R.id.check_basketball); checkFootball = (CheckBox) findViewById(R.id.check_football); checkSwim = (CheckBox) findViewById(R.id.check_swim); button_register = (Button) findViewById(R.id.button_register); btn_add = (Button) findViewById(R.id.button_add); btn_add.setOnClickListener(this); btn_minus = (Button) findViewById(R.id.button_minus); btn_minus.setOnClickListener(this); image = (ImageView) findViewById(R.id.image); button_register.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { ArrayList<String> list = new ArrayList<String>(); if (checkBasketball.isChecked()) { list.add("篮球"); } if (checkFootball.isChecked()) { list.add("足球"); } if (checkSwim.isChecked()) { list.add("游泳"); } for (String hobby : list) { Log.d("hobby", "我的兴趣爱好为:" + hobby); } } }); edittext = (EditText) findViewById(R.id.edittext_password); checkIsshow = (CheckBox) findViewById(R.id.check_isshow); checkIsshow.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton arg0, boolean arg1) { if (arg1) { edittext.setTransformationMethod(HideReturnsTransformationMethod.getInstance());//如果勾选则显示密码 } else { edittext.setTransformationMethod(PasswordTransformationMethod.getInstance());//如果没有勾选则不显示密码 } } }); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override public void onClick(View arg0) { //得到当前SDK的版本号 int versionCode = android.os.Build.VERSION.SDK_INT; if (arg0.getId() == R.id.button_add) { alpha += 5; if (versionCode < 16) { image.setAlpha(alpha);//此方法已被淘汰,被下边方法代替 } else { image.setImageAlpha(alpha);//当前SDK版本太低,不支持此方法,在此前加上@TargetApi(Build.VERSION_CODES.JELLY_BEAN) } } if (arg0.getId() == R.id.button_minus) { alpha += 5; if (versionCode < 16) { image.setAlpha(alpha); } else { image.setImageAlpha(alpha); } } }}
运行结果:
勾选篮球,游泳,打印结果
勾选显示密码,则显示密码,不勾选则不显示。
点击增加透明度,图片透明显示
ListView
ListView可以称得Android中最常用的控件之一,几乎所有的应用程序都要用到它。ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView></LinearLayout>
ListView的简单用法
因为ListView是用于展示数据的,数据是无法直接传递给ListView,所以我们需要借助适配器来完成。下面简单介绍两种适配器的实现类ArrayAdapter和SimpleAdapter的用法。
ArrayAdapter
常用于简单的显示一个文本,它可以通过泛型指定要适配的数据类型,然后在构造方法中把适配的数据传入即可。
mport java.util.ArrayList;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;import android.app.Activity;public class MainActivity extends Activity { private ListView listView; private String[] array = { "张三", "李四", "王五"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listview); ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, array); //也可以自定义新建android.R.layout.simple_list_item_1中的xml代码 listView.setAdapter(arrayAdapter); }}
运行结果:
SimpleAdapter
可以放多个文本,我们需要自己定义一个要布局的格式:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="15dp" android:orientation="horizontal" > <TextView android:id="@+id/textview_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓名" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:orientation="vertical" > <TextView android:id="@+id/textview_age" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="年龄" /> <TextView android:id="@+id/textview_sex" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="性别" /> </LinearLayout> <TextView android:id="@+id/textview_hobby" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="爱好" /></LinearLayout>
MainActivity.java
import java.util.ArrayList;import java.util.HashMap;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.Toast;import android.app.Activity;public class MainActivity extends Activity { private ListView listView; private ArrayList<HashMap<String, String>> arraylist; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listview); arraylist=new ArrayList<HashMap<String,String>>(); HashMap<String , String> zhangsan=createHashMap("张三", "18", "男", "打篮球"); arraylist.add(zhangsan); HashMap<String , String> lisi=createHashMap("李四", "19", "女", "游泳"); arraylist.add(lisi); HashMap<String , String> wangwu=createHashMap("王五", "20", "男", "睡觉"); arraylist.add(wangwu); SimpleAdapter simpleAdapter=new SimpleAdapter(this, arraylist, R.layout.simpleadapter_layout, new String[]{"name","age","sex","hobby"}, new int[]{R.id.textview_name,R.id.textview_age,R.id.textview_sex,R.id.textview_hobby}); listView.setAdapter(simpleAdapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position,long id) { HashMap<String, String> data = arraylist.get(position); Toast.makeText(MainActivity.this,"姓名:"+data.get("name")+" 年龄:"+data.get("age")+" 性别:"+data.get("sex")+" 爱好:"+data.get("hobby"), Toast.LENGTH_SHORT).show(); } }); } private HashMap<String, String> createHashMap(String name,String age,String sex,String hobby){ HashMap<String, String> person = new HashMap<String, String>(); person.put("name", name); person.put("age", age); person.put("sex", sex); person.put("hobby", hobby); return person; }}
注意:AdapterView不允许使用setOnClickListener()方法。
运行结果:
当我们点击第二个list时,短暂显示点击内容
自定义Adapter
首先我们在之前的布局中姓名标签的前边加入一个imageview。
<ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher"/>
定义一个实体类Student
public class Stuent { private String name; private String age; private String sex; private String hobby; private int image; public Stuent(String name,String age,String sex,String hobby,int image){ this.age=age; this.name=name; this.hobby=hobby; this.sex=sex; this.image=image; } public int getImage() { return image; } public void setImage(int image) { this.image = image; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getHobby() { return hobby; } public void setHobby(String hobby) { this.hobby = hobby; }}
自定义一个适配器StudentAdapter
import java.util.ArrayList;import com.lingzhuo.mywidget4.R;import model.Stuent;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class StudentAdapter extends BaseAdapter{ private ArrayList<Stuent> arraylist; private LayoutInflater inflater; //将inflater和数据传递到适配器中 public StudentAdapter(LayoutInflater inflater,ArrayList<Stuent> arraylist){ this.inflater=inflater; this.arraylist=arraylist; } @Override public int getCount() { //得到listview将要显示的数据的条数 return arraylist.size(); } @Override public Object getItem(int position) { //返回索引 return position; } @Override public long getItemId(int position) { //返回索引 return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { //加载我们自定义的布局 View view = inflater.inflate(R.layout.simpleadapter_layout, null); //获得当前项的实例 Stuent student = arraylist.get(position); ImageView image=(ImageView) view.findViewById(R.id.imageview); TextView textview_name=(TextView) view.findViewById(R.id.textview_name); TextView textview_age=(TextView) view.findViewById(R.id.textview_age); TextView textview_sex=(TextView) view.findViewById(R.id.textview_sex); TextView textview_hobby=(TextView) view.findViewById(R.id.textview_hobby); textview_name.setText(student.getName()); textview_age.setText(student.getAge()); textview_sex.setText(student.getSex()); textview_hobby.setText(student.getHobby()); image.setImageResource(student.getImage()); return view; }}
MainActivity.java
import java.util.ArrayList;import java.util.HashMap;import model.Stuent;import adapter.StudentAdapter;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.Toast;import android.app.Activity;public class MainActivity extends Activity { private ListView listView; private ArrayList<Stuent> list; private LayoutInflater inflater; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listview); inflater=getLayoutInflater(); list =new ArrayList<Stuent>(); Stuent zhangsan=new Stuent("张三", "18", "男", "打篮球",R.drawable.ic_launcher); list.add(zhangsan); Stuent lisi=new Stuent("李四", "19", "女", "游泳",R.drawable.ic_launcher); list.add(lisi); Stuent wangwu=new Stuent("王五", "20", "男", "睡觉",R.drawable.ic_launcher); list.add(wangwu); StudentAdapter studentAdapter=new StudentAdapter(inflater, list); listView.setAdapter(studentAdapter); }}
运行结果:
至此,我们只需修改xml中的内容,就能定制出各种复杂的界面了!!!
更多相关文章
- Android 控件(button)对齐方法实现详解
- Android常见布局控件之LinearLayout和TableLayout
- Android开发——控件基础(三)EditText组件以及简单的登录界面
- Android项目打包、Eclipse视图和UI控件
- 说说 Android 的常见 UI 控件
- Android基础控件使用指南