您的位置:首页 > 移动开发 > Android开发

Android的常用基本控件ImageView、ListView

2015-08-24 21:04 639 查看
领卓教育培训第四十二天

常用的基本控件

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

[code]<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

[code]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允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕。

[code]<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

常用于简单的显示一个文本,它可以通过泛型指定要适配的数据类型,然后在构造方法中把适配的数据传入即可。

[code]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

可以放多个文本,我们需要自己定义一个要布局的格式:

[code]<?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

[code]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。

[code]<ImageView 
        android:id="@+id/imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"/>


定义一个实体类Student

[code]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

[code]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

[code]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中的内容,就能定制出各种复杂的界面了!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: