常用的基本控件
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);
}
}
}
}
運作結果:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiMwATNxgTN5EDNygDM1EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
勾選籃球,遊泳,列印結果
勾選顯示密碼,則顯示密碼,不勾選則不顯示。
點選增加透明度,圖檔透明顯示
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中的内容,就能定制出各種複雜的界面了!!!