天天看點

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 += ;
            if (versionCode < ) {
                image.setAlpha(alpha);//此方法已被淘汰,被下邊方法代替
            } else {
                image.setImageAlpha(alpha);//目前SDK版本太低,不支援此方法,在此前加上@TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
            }
        }
        if (arg0.getId() == R.id.button_minus) {
            alpha += ;
            if (versionCode < ) {
                image.setAlpha(alpha);
            } else {
                image.setImageAlpha(alpha);
            }
        }
    }
}
           

運作結果:

Android的常用基本控件ImageView、ListView常用的基本控件

勾選籃球,遊泳,列印結果

Android的常用基本控件ImageView、ListView常用的基本控件

勾選顯示密碼,則顯示密碼,不勾選則不顯示。

點選增加透明度,圖檔透明顯示

Android的常用基本控件ImageView、ListView常用的基本控件

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);
    }
}
           

運作結果:

Android的常用基本控件ImageView、ListView常用的基本控件

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()方法。

運作結果:

Android的常用基本控件ImageView、ListView常用的基本控件

當我們點選第二個list時,短暫顯示點選内容

Android的常用基本控件ImageView、ListView常用的基本控件

自定義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);
    }
}
           

運作結果:

Android的常用基本控件ImageView、ListView常用的基本控件

至此,我們隻需修改xml中的内容,就能定制出各種複雜的界面了!!!

繼續閱讀