一、控件回顧:
(一)、需要掌握的n個(gè)UI控件、組件名稱:
(二)、基本控件:——?TextView:
1、andorid:text
2、android:textColor
3、android:textSize
4、andorid:height
5、android:width
6、android:inputType
7、android:singleLine
8、android:gravity
9、android:drawableLeft
10、android:drawableRight
11、android:drawableTop
12、android:drawableBottom
13、android:autoLink? (web / email / phone / map / all / none)
14、android:hint
二、基本控件:—— EditText
(一)、?EditText?類結(jié)構(gòu):
java.lang.Object
? ??? android.view.View
?? ?? ?? android.widget.TextView
?? ?? ?? ?? android.widget.EditText
備注:EditView類繼承自TextView類,EditView與TextView最大的不同就是用戶可以對EditView控件進(jìn)行編輯,同時(shí)還可以為EditView控件設(shè)置監(jiān)聽器,用來判斷用戶的輸入是否合法。
(二)、EditView常用屬性:
(三)、android:inputType的可選項(xiàng):
android:inputType="textPersonName"
android:inputType="textPassword"
android:inputType="numberPassword"
android:inputType="textEmailAddress"
android:inputType="phone"
android:inputType="textPostalAddress"
android:inputType="time"
android:inputType="date"
android:inputType="number"
(四)、EditText常用方法:
1、setText?()
2、getText?()
三、基本控件:——?ImageView:
(一)、類結(jié)構(gòu):
java.lang.Object
? ?? android.view.View
?? ? ? android.widget.ImageView
(二)、 ImageView?常用屬性:
1、andorid:src?? 設(shè)置圖片來源。屬性值為android:src="@drawable/圖片名稱"
2、android:adjustViewBounds?? ?用于設(shè)置 ImageView?是否調(diào)整自己的邊界,來保持所顯示圖片的長寬比例。屬性值為true或false
3、 android:maxHeight?? ? ? 設(shè)置 ImageView?的最大高度。需要先設(shè)置android:adjustViewBounds為true,否則不起作用。
4、andorid:maxWidth?? ? ? ? 設(shè)置 ImageView?的最大寬度。需要先設(shè)置android:adjustViewBounds為true,否則不起作用。
5、 android:scaleType?? ? ? ? ? 設(shè)置所顯示的圖片如何縮放或移動(dòng),以適應(yīng)ImageView的大小。可選項(xiàng):fitCenter、fitStart 、 fitEnd、 fitXY 、?center、centerCrop、centerInside、matrix
matrix ?:保持原圖大小、從左上角的點(diǎn)開始,以矩陣形式繪圖。 MATRIX 用圖片的矩陣從左向開始來畫,不做任何拉伸。如果一個(gè)100*100的ImageView,它的src是10*10的小圖,則圖顯示在左上角,如果scr是200*200的大圖,則截取它左上的100*100做顯示。
fitXY?:把圖片按照指定的大小在View中顯示,拉伸顯示圖片,不保持原比例,填滿View.?FIT_XY 不保持圖片橫寬比,把圖片的寬和高分別拉伸或縮放至ImageView的大小。如果是一個(gè)100*100的ImageView,它的src是20*10,則直接把它拉伸為100*100后顯示,如果src是200*100,則把它縮放為100*100后顯示,此種方法容易導(dǎo)致圖片變形。
fitStart?:把圖片按比例擴(kuò)大(縮小)到View的寬度,顯示在View的上部分位置 。FIT_START 與 FIT_CENTER 縮放拉伸原則一樣,區(qū)別是處理過的圖片居左顯示。
fitCenter?:把圖片按比例擴(kuò)大(縮小)到View的寬度,居中顯示?。FIT_CENTER 保持橫寬比,對圖片進(jìn)行拉伸或縮放,原則是:
1)圖片能完整顯示;
2)圖片寬或高至少有一樣與ImageView的相同;
3)處理過的圖片居中顯示。
如果是一個(gè)100*100的ImageView,它的src是20*10,先把圖片等比放大到100*50,然后再居中顯示。它的src是100*200,會(huì)先把圖片等比縮放到50*100,然后再居中顯示。
fitEnd?:把圖片按比例擴(kuò)大(縮小)到View的寬度,顯示在View的下部分位置 。FIT_END 與 FIT_CENTER縮放拉伸原則一樣,區(qū)別是處理過的圖片居右顯示。
Center?: 以原圖的幾何中心點(diǎn)和ImagView的幾何中心點(diǎn)為基準(zhǔn),按圖片的原來size居中顯示,不縮放, 當(dāng)圖片長/寬超過View的長/寬,則截取圖片的居中部分顯示ImageView的size. 當(dāng)圖片小于View 的長寬時(shí),只顯示圖片的size,不剪裁。 CENTER 不做任何拉伸,以居中的方式顯示圖片。如果是一個(gè)100*100的ImageView,它的src是10*10的小圖,則圖顯示在的中央,如果src是200*200的大圖,截取中間的100*100用來顯示。
centerCrop?:以原圖的幾何中心點(diǎn)和ImagView的幾何中心點(diǎn)為基準(zhǔn),按比例擴(kuò)大(圖片小于View的寬時(shí))圖片的size。 居中顯示,使得圖片長 (寬)等于或大于View的長(寬),并按View的大小截取圖片。 當(dāng)原圖的size大于ImageView時(shí),按比例縮小圖片,使得長寬中有一向等于ImageView,另一向大于ImageView。?CENTER_CROP 保持圖片橫寬比,以圖片中心為基點(diǎn)進(jìn)行拉伸顯示,拉伸的原則是填充滿整個(gè)ImageView。如果是一個(gè)100*100的ImageView,它的src是20*10,則它會(huì)被等比拉伸成200*100,然后再截取其中央的100*100顯示。如果src是200*300的,直接截取中央的100*100顯示,不做任何拉伸或縮放。
centerInside?:以原圖的幾何中心點(diǎn)和ImagView的幾何中心點(diǎn)為基準(zhǔn),將圖片的內(nèi)容完整居中顯示, 通過按比例縮小原來的size使得圖片長(寬)等于或小于ImageView的長(寬)。CENTER_INSIDE 保持圖片橫寬比,以圖片中心為基點(diǎn)進(jìn)行縮放顯示,縮放的原則是顯示完整個(gè)圖片。如果是一個(gè)100*100的ImageView,它的src是20*10,它直接居中顯示。如果src是200*100的,先把圖片等比縮小到100*50,然后再居中顯示。
一般情況下,設(shè)置為centerCrop能獲得較好的適配效果。
(三)、ImageView常用方法:
1、setImageBitmap()
2、setImageDrawable()
3、setImageResource()
(四)、實(shí)現(xiàn)圖片變換的核心代碼:
? ??????
四、基本控件:——?RadioButton及RadioGroup
(一)、類結(jié)構(gòu)介紹:
java.lang.Object
? ?? android.view.View
? ? ? android.view.ViewGroup
? ? ? ? android.widget.LinearLayout
? ? ? ? ? android.widget.RadioGroup
java.lang.Object
? ?? android.view.View
? ? ? android.widget.TextView
? ? ? ? android.widget.Button
? ? ? ? ? android.widget.CompoundButton
? ? ? ? ? ? android.widget.RadioButton
RadioButton繼承于Button,所以具有普通按鈕的各種屬性,但是與普通按鈕不同的是,RadioButton提供了可選中的功能。在使用RadioButton的時(shí)候,要使用RadioGroup來包圍起這些RadioButton。
【備注:】RadioGroup是LinearLayout的子類,所以RadioGroup本質(zhì)上是一個(gè)存放RadioButton的布局容器。
需要記住的是:默認(rèn)的LinearLayout布局的Orientation屬性是水平的,而默認(rèn)的RadioGroup的Orientation屬性是垂直的。
(二)、重點(diǎn)記憶的類方法:
1、RadioGroup類中的getCheckedRadioButtonId()
(三)、核心代碼:
// A.、UI的代碼:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
android:id="@+id/button_main_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="clickButton"
android:text="提交"/>
android:id="@+id/radioGroup_main_sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:id="@+id/radioButton_main_female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女"/>
android:id="@+id/radioButton_main_male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="男"/>
// B、java代碼:
public class MainActivityextendsActivity {
private RadioGroup?radioGroup_main_sex;
private Button?button_main_submit;
@Override
protected void onCreate(Bundle savedInstanceState) {
????super.onCreate(savedInstanceState);
????setContentView(R.layout.activity_main);
????button_main_submit?= (Button) findViewById(R.id.button_main_submit);
????radioGroup_main_sex?= (RadioGroup) findViewById(R.id.radioGroup_main_sex);
????button_main_submit.setOnClickListener(newOnClickListener() {
????????@Override
????????public void onClick(View v) {
????????// 獲取勾選項(xiàng)的id
????????intid =?radioGroup_main_sex.getCheckedRadioButtonId();
????????// 通過id找到被勾選項(xiàng)的控件
????????RadioButton radioButton = (RadioButton) findViewById(id);
????????// 通過控件的getText()方法找到該控件的text屬性的值
????????String result = radioButton.getText().toString();
????????Toast.makeText(MainActivity.this,?"您選擇了:"?+ result,
????????Toast.LENGTH_LONG).show();
????????}
});
radioGroup_main_sex
.setOnCheckedChangeListener(newOnCheckedChangeListener() {
????@Override
????public void onCheckedChanged(RadioGroup group,intcheckedId) {
????????RadioButton radioButton = (RadioButton) findViewById(checkedId);
????????String result = radioButton.getText().toString();
????????Toast.makeText(MainActivity.this,?"您選擇了:"?+ result,
????????Toast.LENGTH_LONG).show();
????}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
????// Inflate the menu; this adds items to the action bar if it is present.
????getMenuInflater().inflate(R.menu.main, menu);
????return true;
}
}
五、CheckBox:
(一)、 類結(jié)構(gòu)介紹:
java.lang.Object
? ?? android.view.View
? ? ? android.widget.TextView
? ? ? ? android.widget.Button
? ? ? ? ? android.widget.CompoundButton
? ? ? ? ? ? android.widget.CheckBox
CheckBox繼承于Button,所以具有普通按鈕的各種屬性,但是與普通按鈕不同的是, CheckBox 提供了可選中的功能。
【備注:】CheckBox有一個(gè)父類是CompoundButton,所以在使用監(jiān)聽器的時(shí)候要注意跟單選項(xiàng)進(jìn)行區(qū)別。
(二)、核心代碼:
A.、UI的代碼:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
android:id="@+id/checkBox_main_hobby1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="游泳"/>
android:id="@+id/checkBox_main_hobby2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="上網(wǎng)"/>
android:id="@+id/checkBox_main_hobby3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="音樂"/>
android:id="@+id/checkBox_main_hobby4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="睡覺"/>
android:id="@+id/checkBox_main_selectall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="全選"/>
android:id="@+id/button_main_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提交"/>
B、java代碼:
public class MainActivityextendsActivity {
private CheckBox?checkBox_main_hobby1;
private CheckBox?checkBox_main_hobby2;
private CheckBox?checkBox_main_hobby3;
private CheckBox?checkBox_main_hobby4;
private CheckBox?checkBox_main_selectall;
private Button?button_main_submit;
@Override
protected void onCreate(Bundle savedInstanceState) {
????super.onCreate(savedInstanceState);
????setContentView(R.layout.activity_main);
????checkBox_main_hobby1?= (CheckBox) findViewById(R.id.checkBox_main_hobby1);
????checkBox_main_hobby2?= (CheckBox) findViewById(R.id.checkBox_main_hobby2);
????checkBox_main_hobby3?= (CheckBox) findViewById(R.id.checkBox_main_hobby3);
????checkBox_main_hobby4?= (CheckBox) findViewById(R.id.checkBox_main_hobby4);
????checkBox_main_selectall?= (CheckBox) findViewById(R.id.checkBox_main_selectall);
????button_main_submit?= (Button) findViewById(R.id.button_main_submit);
????button_main_submit.setOnClickListener(newOnClickListener() {
????@Override
????public void onClick(View v) {
????Toast.makeText(MainActivity.this,?"您選擇了:"?+ getResult(),
????Toast.LENGTH_SHORT).show();
}
});
// 定義一個(gè)有名字的監(jiān)聽器類。之所以不用匿名內(nèi)部類形式,是因?yàn)橛卸鄠€(gè)控件都要使用這同一個(gè)監(jiān)聽器
OnCheckedChangeListener listener =newOnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
booleanisChecked) {
????if(!buttonView.isChecked()) {
????????checkBox_main_selectall.setChecked(false);
????}
????if(checkBox_main_hobby1.isChecked()
????&&?checkBox_main_hobby2.isChecked()
????&&?checkBox_main_hobby3.isChecked()
????&&?checkBox_main_hobby4.isChecked()) {
????checkBox_main_selectall.setChecked(true);
????}
????Toast.makeText(MainActivity.this,?"您選擇了:"?+ getResult(),
????Toast.LENGTH_SHORT).show();
????}
};
checkBox_main_hobby1.setOnCheckedChangeListener(listener);
checkBox_main_hobby2.setOnCheckedChangeListener(listener);
checkBox_main_hobby3.setOnCheckedChangeListener(listener);
checkBox_main_hobby4.setOnCheckedChangeListener(listener);
// 給全選checkbox設(shè)置單擊監(jiān)聽事件
checkBox_main_selectall.setOnClickListener(newOnClickListener() {
@Override
public void onClick(View v) {
????booleanflag =?checkBox_main_selectall.isChecked();
????checkBox_main_hobby1.setChecked(flag);
????checkBox_main_hobby2.setChecked(flag);
????checkBox_main_hobby3.setChecked(flag);
? ? ?checkBox_main_hobby4.setChecked(flag);
}
});
}
// 獲取多選項(xiàng)中被勾選的結(jié)果。利用isChecked()方法來判斷哪個(gè)選項(xiàng)被勾選
private String getResult() {
String Builder sb =newStringBuilder();
if(checkBox_main_hobby1.isChecked()) {
????sb.append(checkBox_main_hobby1.getText());
}
if(checkBox_main_hobby2.isChecked()) {
sb.append(checkBox_main_hobby2.getText());
}
if(checkBox_main_hobby3.isChecked()) {
????sb.append(checkBox_main_hobby3.getText());
}
if(checkBox_main_hobby4.isChecked()) {
????sb.append(checkBox_main_hobby4.getText());
}
????return sb.toString();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
????getMenuInflater().inflate(R.menu.main, menu);
????return true;
}
}
六、Spinner ?(下拉式列表)
(一)、 類結(jié)構(gòu)介紹:
java.lang.Object
? ?? android.view.View
? ? ? android.view.ViewGroup
? ? ? ? android.widget.AdapterView
? ? ? ? ? android.widget.AbsSpinner
? ? ? ? ? ? android.widget.Spinner
(二)、核心代碼:
A.、UI的代碼:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
android:id="@+id/spinner_main_edu"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
android:id="@+id/button_main_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/button_main_submit_fontsize"
android:text="提交"/>
android:id="@+id/text_main_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""/>
B、java代碼:
public class MainActivityextendsActivity {
????private Spinner?spinner_main_edu;
????private Button?button_main_submit;
????private TextView?text_main_info;
????private ArrayAdapter?adapter?=null;
????@Override
????protected void onCreate(Bundle savedInstanceState) {
????super.onCreate(savedInstanceState);
????setContentView(R.layout.activity_main);
????button_main_submit?= (Button) findViewById(R.id.button_main_submit);
????text_main_info?= (TextView) findViewById(R.id.text_main_info);
????// 設(shè)置數(shù)據(jù)源
????String[] strArr =newString[] {?"初中",?"高中",?"中專",?"大專",?"大本",?"研究生"?};
????spinner_main_edu?= (Spinner) findViewById(R.id.spinner_main_edu);
????// 構(gòu)建適配器。Spinner控件常用ArrayAdapter適配器,只顯示文本。
????// ArrayAdapter是數(shù)組適配器。第一個(gè)參數(shù)是上下文對象或者說是環(huán)境對象,第二個(gè)參數(shù)是顯示數(shù)據(jù)的布局id,
????// 布局id可以自定義布局,也可以使用系統(tǒng)自帶的布局。如果使用系統(tǒng)的布局,則使用android.R.layout.的形式來調(diào)用。
????// 第三個(gè)參數(shù)是需要加載的數(shù)據(jù)源數(shù)組。至于是哪種類型的數(shù)組,取決于ArrayAdapter的泛型類型。
????adapter?=newArrayAdapter(MainActivity.this,
????android.R.layout.simple_list_item_single_choice, strArr);
????// 給控件設(shè)置適配器
????spinner_main_edu.setAdapter(adapter);
????spinner_main_edu
.????setOnItemSelectedListener(newAdapterView.OnItemSelectedListener() {
????????@Override
????????public void onItemSelected(AdapterView parent,
????????View view,intposition,longid) {
????????// 方法1:利用AdapterView的getItemAtPosition(position)獲取item的內(nèi)容
????????String data = parent.getItemAtPosition(position)
????????.toString();
????????// 方法2:利用AdapterView的getSelectedItem()獲取item的內(nèi)容
????????String data2 = parent.getSelectedItem().toString();
????????// String data3 = spinner_main_edu.getItemAtPosition(
????????// position).toString();
????????// String data4 = spinner_main_edu.getSelectedItem()
????????// .toString();
????????// 方法3:利用adapter的getItem()獲取item的內(nèi)容
????????String data3 =?adapter.getItem(position);
????????text_main_info
????????.setText(data +?":"?+ data2 +?":"?+ data3);
}
????????@Override
????????public voidonNothingSelected(AdapterView parent) {
????????}
});
// 以下代碼看似正確,實(shí)際上是錯(cuò)誤的。java.lang.RuntimeException: setOnItemClickListener
// cannot be used with a spinner.
// spinner_main_edu
// .setOnItemClickListener(new AdapterView.OnItemClickListener() {
//
// @Override
// public void onItemClick(AdapterView parent, View view,
????//int position, long id) {
????// String data2 = parent.getSelectedItem().toString();
????// text_main_info.setText(data2 + ":" + data2);
// }
// });
button_main_submit.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
????String data =?spinner_main_edu.getSelectedItem().toString();
????text_main_info.setText(getResources().getString(
????R.string.text_main_info_str)
????+ data);
}
});
// XmlResourceParser pullParser = getResources().getXml(
// R.xml.citys_weather);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
????// Inflate the menu; this adds items to the action bar if it is present.
????getMenuInflater().inflate(R.menu.main, menu);
????return true;
}
}