UI編程基礎(chǔ)
Android UI元素
視圖(View)
視圖容器(ViewGroup)
布局管理(Layout)
Activity
Fragment
視圖
View視圖組件是用戶界面的基礎(chǔ)元素。
View對(duì)象是Android屏幕上一個(gè)特定的矩形區(qū)域的布局和內(nèi)容屬性的數(shù)據(jù)載體,通過(guò)View對(duì)象可實(shí)現(xiàn)布局、繪圖、焦點(diǎn)變換、滾動(dòng)條、屏幕區(qū)域的按鍵、用戶交互等功能。
Android應(yīng)用的絕大部分UI組件都放在android.widget包及其子包中,所有這些UI組件都繼承View類。
View的常見(jiàn)子類及功能
類名功能描述TextView文本視圖EditText編輯文本框Button按鈕Checkbox復(fù)選框RadioGroup單選按鈕組Spinner下拉列表AutoCompleteTextView自動(dòng)完成文本框DataPicker日期選擇器TimePicker時(shí)間選擇器DigitalClock數(shù)字時(shí)鐘AnalogClock模擬時(shí)鐘ProgessBar進(jìn)度條RatingBar評(píng)分條SeekBar搜索條GridView網(wǎng)格視圖ListView列表視圖ScrollView滾動(dòng)視圖
視圖容器
ViewGroup類通常作為其他組件的容器使用。
ViewGroup是View的子類,可以當(dāng)成View使用。
View組件可以添加到ViewGroup中,一個(gè)ViewGroup也可以添加到另一個(gè)ViewGroup中。
ViewGroup類提供的主要方法
類名功能描述ViewGroup()構(gòu)造方法void addView(View view)用于添加子視圖,以View作為參數(shù),將該View增加到視圖組中removeView(View view)將指定的View從視圖組中移除updateViewLayout(View view,ViewGroup.LayoutParams params)用于更新某個(gè)View的布局void bringChildToFront(View child)將參數(shù)所指定的視圖移動(dòng)到所有視圖之前顯示boolean clearChildFocus(View child)清除參數(shù)所指定的視圖的焦點(diǎn)boolean dispatchKeyEvent(KeyEvent event)將參數(shù)所指定的鍵盤事件boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event)將參數(shù)所指定的鍵盤事件分發(fā)給當(dāng)前焦點(diǎn)路徑的視圖boolean dispatchSetSelected(boolean selected)為所有的子視圖調(diào)用setSelected()方法
ViewGroup繼承了View類,雖然可以當(dāng)成普通的View來(lái)使用,但習(xí)慣上將ViewGroup當(dāng)容器來(lái)使用。由于ViewGroup是一個(gè)抽象類,在實(shí)際應(yīng)用中通常使用ViewGroup的子類作為容器,例如各種布局管理器。
ViewGroup的繼承者大部分位于android.widget包中。
Android布局文件中,每個(gè)組件所能使用的XML屬性有三類:
組件本身的XML屬性;(android:inputtype)
組件祖先類(View)的XML屬性;(android:id)
組件所屬容器的布局參數(shù)。(android:layout_width)
ViewGroup容器使用兩個(gè)內(nèi)部類來(lái)控制子組件在其中的分布位置:
ViewGroup.LayoutParams
ViewGroup.MarginLayoutParams
由于LayoutParams也具有繼承關(guān)系,因此LinearLayout的子類除了可以使用LinearLayout.LayoutParams所提供的XML屬性外,還可以使用其祖先類ViewGroup.LayoutParams的XML屬性。
布局管理
布局管理器可以根據(jù)運(yùn)行平臺(tái)來(lái)調(diào)整組件的大小
布局管理器本身是一種UI組件,所有布局管理器都是ViewGroup的子類,所有布局都可以作為容器使用
Android常用的布局:
LinearLayout(線性布局)
RelativeLayout(相對(duì)布局)
TableLayout(表格布局)
AbsoluteLayout(絕對(duì)布局)
ConstraintLayout(約束布局)
Fragment
Fragment允許將Activity拆分成多個(gè)完全獨(dú)立的可重用的組件,每個(gè)組件具有自己的生命周期和UI布局
Fragment可以靈活地為不同大小屏幕地設(shè)備創(chuàng)建UI界面
每個(gè)Fragment都是一個(gè)獨(dú)立的模塊,并與綁定的Activity緊密的聯(lián)系在一起
一個(gè)Fragment可以被多個(gè)Activity所共用
界面布局
兩種布局方式
在XML布局文件中聲明(推薦)
在程序中直接實(shí)例化布局及其組件
常見(jiàn)的Android布局
LinearLayout
RelativeLayout
TableLayout
AbsoluteLayout
線性布局
LinearLayout是線性布局,布局中的組件按照垂直或者水平方向進(jìn)行排列
XML屬性對(duì)應(yīng)方法功能描述android:dividersetDividerDrawable()設(shè)置垂直布局時(shí)兩個(gè)按鈕之間的分隔條android:gravitysetGravity()設(shè)置布局管理器內(nèi)組件的對(duì)齊方式android:orientationsetOrientation()設(shè)置布局管理器內(nèi)組件的排列方式
LinearLayout中子元素的位置都受LinearLayout.LayoutParams控制
XML屬性功能描述android:layout_gravity指定子元素在LinearLayout中的對(duì)齊方式android:layout_weight指定子元素在LinearLayout中所占的比重
線性布局不會(huì)換行,當(dāng)組件順序排列到屏幕邊緣時(shí),剩余的組件不會(huì)被顯示
示例
?<LinearLayout
? ? ? ? ? ? ? ?xmlns:android="http://schemas.android.com/apk/res/android"
? ? ? ? ? ? ? ?android:layout_width="match_parent"
? ? ? ? ? ? ? ?android:layout_height="match_parent"
? ? ? ? ? ? ? ?android:orientation="vertioal"
? ? ? ? ? ? ? ?android:gravity="center">
?</LinearLayout>
表格布局
TableLayout類似表格形式,以行和列的方式來(lái)布局子組件
在TableLayout中,可以通過(guò)以下3種方式對(duì)單元格進(jìn)行設(shè)置:
Shrinkable
Stretchable
Collapsed
XML屬性對(duì)應(yīng)方法功能描述android:shrinkColumnssetShrinkAllColumns(boolean)設(shè)置可收縮的列android:stretchColumnssetStretchAllColumns(boolean)設(shè)置可伸展的列android:collapseColumnssetColumnCollapsed(int,boolean)設(shè)置要隱藏的列
全局屬性的設(shè)置
?<?xml version="1.0" encoding="utf-8"?>
?<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
? ? ? ? ? ? ? android:layout_width="match_parent"
? ? ? ? ? ? ? android:layout_height="match_parent"
? ? ? ? ? ? ? android:stretchColumns="0"
? ? ? ? ? ? ? android:shrinkColumns="1,2">
?</TableLayout>
列可以同時(shí)具備stretchColumns和shrinkColumns屬性;當(dāng)該列的內(nèi)容比較多時(shí),將以“多行”方式顯示其內(nèi)容。
由于TableLayout繼承了LinearLayout,因此完全支持LinearLayout所支持的全部XML屬性。
使用TableRow.LayoutParams對(duì)TableRow的子元素進(jìn)行修飾
XML屬性功能描述android:layout_column指定該單元格在第幾列顯示android:layout_span指定該單元格占據(jù)的列數(shù)
屬性設(shè)置
?<TableLayout
? ? ? ? ? ? ? xmlns:android="http://schemas.android.com/apk/res/android"
? ? ? ? ? ? ? android:layout_width="match_parent"
? ? ? ? ? ? ? android:layout_height="match_parent"
? ? ? ? ? ? ? android:stretchColumns="0"
? ? ? ? ? ? ? android:shrinkColumns="1,2">
? <TableRow>
? ? ? <Button android:layout_span="2" />
? ? ? ? ?<Button android:layout_column="1" />
? ? ?</TableRow>
?</TableLayout>
? ? ? ? ? ? ?
相對(duì)布局
在相對(duì)布局容器中子組件的位置總是相對(duì)于兄弟組件或父容器
XML屬性功能描述android:layout_toLeftOf控制該組件位于指定ID組件的左側(cè)android:layout_toRightOf控制該組件位于指定ID組件的右側(cè)android:layout_above控制該組件位于指定ID組件的上方android:layout_below控制該組件位于指定ID組件的下方android:layout_alignLeft控制該組件與指定ID組件的左邊界進(jìn)行對(duì)齊android:layout_alignTop控制該組件與指定ID組件的上邊界進(jìn)行對(duì)齊android:layout_alignRight控制該組件與指定ID組件的右邊界進(jìn)行對(duì)齊android:layout_alignBottom控制組件與指定ID組件的下面邊界對(duì)齊
在相對(duì)布局容器中子組件的位置總是相對(duì)于兄弟組件或父容器
XML屬性功能描述android:layout_alignParentLeft指定該組件是否與布局容器左對(duì)齊android:layout_alignParentTop指定該組件是否與布局容器頂端對(duì)齊android:layout_alignParentRight指定該組件是否與布局容器右對(duì)齊android:layout_alignParentBottom指定該組件是否與布局容器底端對(duì)齊android:layout_centerInParent指定該組件是否位于布局容器的中央位置android:layout_centerHorizontal指定該組件是否位于布局容器的水平居中android:layout_centerVertical指定該組件是否位于布局容器的垂直居中
示例
?<RelativeLayout
? ? ? ? ? ? ? ? ?xmlns:android="http://schemas.android.com/apk/res/android"
? ? ? ? ? ? ? ? ?android:layout_width="match_parent"
? ? ? ? ? ? ? ? ?android:layout_height="match_parent">
?</RelativeLayout>
相對(duì)布局
AbsoluteLayout通過(guò)指定組件的確切X、Y坐標(biāo)來(lái)確定組件的位置
四大控制屬性
XML屬性功能描述android:layout_width組件寬度android:layout_height組件高度android:layout_x設(shè)置組件的X坐標(biāo)android:layout_y設(shè)置組件的Y坐標(biāo)
通過(guò)AbsoluteLayout實(shí)現(xiàn)絕對(duì)布局
?<AbsoluteLayout android:id="@+id/AbsoluteLayout01"
? ? ? ? ? ? ? ? ?android:layout_width="wrap_content"
? ? ? ? ? ? ? ? ?android:layout_height="wrap_content">
? <Button android:text="A"
? ? ? ? ? ? ?android:id="@+id/Button01"
? ? ? ? ? ? ?android:layout_width="wrap_content"
? ? ? ? ? ? ?android:layout_height="wrap_content"
? ? ? ? ? ? ?android:layout_x="10dp"
? ? ? ? ? ? ?android:layout_y="20dp">
? ? ?</Button>
?</AbsoluteLayout>
約束布局
約束布局ConstraintLayout是一個(gè)ViewGroup,可以在API9以上的Android系統(tǒng)使用,主要是為了解決布局嵌套過(guò)多的問(wèn)題,以靈活的方式定位和調(diào)整小部件。
從Android Studio 2.3起,官方的模板默認(rèn)使ConstraintLayout。
ConstraintLayout布局優(yōu)勢(shì):
ConstrainLayout使用起來(lái)比RelativeLayout更靈活,性能更出色。
ConstrainLayout可以按照比例約束控件位置和尺寸,能夠更好地適配屏幕大小不同的機(jī)型。
ConstraintLayout位置控制
8個(gè)邊界控制屬性(用法跟RelativeLayout類似)
App:layout_constraintLeft_toLeftOf
App:layout_constraintLeft_toRightOf
App:layout_constraintRight_toRightOf
App:layout_constraintRight_toLeftOf
App:layout_constraintTop_toTopOf
App:layout_constraintTop_toBottomOf
App:layout_constraintBottom_toBottomOf
App:layout_constraintBottom_toTopOf
ConstraintLayout位置控制
?<!--如下圖,左邊一個(gè)A,右邊一個(gè)c,如果想新建一個(gè)B在A c之間,代碼如下-->
?<Button
? ? ? ? ?App : layout_constraintLeft_toRightOf="@+id/bt_a"
? ? ? ? ?App : layout_constraintRight_toLeftOf="@+id/bt_c"
? ? ? ? ?android : layout_width="wrap_content"
? ? ? ? ?android: layout_height="wrap_content"
? ? ? ? ?android : text="B"/>
?<!--字面理解:1.我最左邊的位置,在button A的右邊--><!--字面理解:2.我最右邊的位置,在button c的左邊-->
?
偏移
layout_constraintHorizontal_bias (水平方向偏移)(范圍o-1)
layout_constraintVertical_bias(垂直方向偏移)(范圍o-1)
大小
layout_constraintHorizontal_weight//水平方向上比重,類似線性布局
layout_constraintVertical_weight//垂直方向上比重,類似線性布局
基于監(jiān)聽(tīng)的事件處理
三個(gè)事件模型
事件
事件源
事件監(jiān)聽(tīng)器
事件監(jiān)聽(tīng)器
事件監(jiān)聽(tīng)器接口事件功能描述OnClickListener單擊事件當(dāng)用戶點(diǎn)擊某個(gè)組件或者方向鍵觸發(fā)該事件OnFocusChangeListener焦點(diǎn)事件當(dāng)組件獲得或者失去焦點(diǎn)時(shí)觸發(fā)該事件OnKeyListener按鍵事件當(dāng)用戶按下或者釋放設(shè)備上的某個(gè)按鍵觸發(fā)該事件OnTouchListener觸摸事件當(dāng)觸碰屏幕時(shí)觸發(fā)該事件OnCreateContextMenuListener創(chuàng)建上下文菜單事件當(dāng)創(chuàng)建上下文菜單時(shí)觸發(fā)該事件OnCheckedChangeListener選項(xiàng)改變事件當(dāng)選擇改變時(shí)觸發(fā)該事件
實(shí)現(xiàn)監(jiān)聽(tīng)器的四種形式
Activity本身作為事件監(jiān)聽(tīng)器︰通過(guò)Activity實(shí)現(xiàn)監(jiān)聽(tīng)器接口,并實(shí)現(xiàn)事件處理方法
匿名內(nèi)部類形式︰使用匿名內(nèi)部類創(chuàng)建事件監(jiān)聽(tīng)器對(duì)象
內(nèi)部類或外部類形式∶將事件監(jiān)聽(tīng)類定義為當(dāng)前類的內(nèi)部類或普通的外部類
綁定標(biāo)簽∶在布局文件中為指定標(biāo)簽綁定事件處理方法
監(jiān)聽(tīng)事件的處理
實(shí)現(xiàn)基于監(jiān)聽(tīng)的事件處理步驟
在事件處理方法中編寫事件處理代碼
在相應(yīng)的組件上注冊(cè)監(jiān)聽(tīng)器
通過(guò)Activity實(shí)現(xiàn)監(jiān)聽(tīng)器接口,并實(shí)現(xiàn)該接口中對(duì)應(yīng)的事件處理方法
基于監(jiān)聽(tīng)的事件的處理模型的編程步驟:
基于監(jiān)聽(tīng)的事件的處理模型的編程步驟∶
實(shí)現(xiàn)事件監(jiān)聽(tīng)器類
調(diào)用事件源的setXxxListener()方法,將事件監(jiān)聽(tīng)器注冊(cè)給事件源對(duì)象
通過(guò)Activity實(shí)現(xiàn)監(jiān)聽(tīng)器接口
?public class EvenBtnActivity extends Activity implements View.OnClickListener{
? ? ?protected void onCreate(Bundle savedInstanceState){
? ? ? ? ?clickBtn = (Button)findViewById(R.id.clickBtn);
? ? ? ? ?clickBtn.setOnClickListener(this);
? ? ? ?
? ? ?}
?}
匿名內(nèi)部類形式
為什么需要內(nèi)部類?
由于大部分情況下事件只是臨時(shí)使用一次,匿名內(nèi)部類形式的事件監(jiān)聽(tīng)器更合適。
內(nèi)部類對(duì)象可以訪問(wèn)創(chuàng)建它的對(duì)象的實(shí)現(xiàn),包括私有數(shù)據(jù);
內(nèi)部類不為同一包的其他類所見(jiàn),具有很好的封裝性;
使用內(nèi)部類可以很方便的編寫事件驅(qū)動(dòng)程序;
匿名內(nèi)部類可以方便的定義運(yùn)行時(shí)回調(diào);
內(nèi)部類可以方便的定義
匿名內(nèi)部類的使用
?clickBtn = (Button)findViewById(R.id.clickBtn);
?clickBtn.setOnClickListener(new View.OnClickListener() {
? ? ?@Override
? ? ?public void onClick(View v){
? ? ? ? ?showText.setText("匿名內(nèi)部類:btn按鈕被單擊了!")
? ? ?}
?});
內(nèi)部類、外部類形式
將事件監(jiān)聽(tīng)器定義成當(dāng)前類的內(nèi)部類
使用內(nèi)部類有以下優(yōu)點(diǎn):
可以在當(dāng)前類中復(fù)用內(nèi)部監(jiān)聽(tīng)器類
可以訪問(wèn)當(dāng)前類的所有界面組件
將事件監(jiān)聽(tīng)器定義成當(dāng)前類的內(nèi)部類
?protected void onCreate(Bundle savedInstanceState){
? ? ?clickBtn.setOnClickListener(new ClickListener());
?}
?
?class ClickListener implements View.OnClickListener{
? ? ?@Override
? ? ?public void onClick(View v){
? ? ? ? ?showTxt.setText("將事件監(jiān)聽(tīng)器定義成當(dāng)前類的內(nèi)部類:btn按鈕被單擊了!");
? ? ?}
?}
綁定標(biāo)簽
event_tag.xml
?<Button
? ? ? ? ?android: id="@+id/ clickBtn"
? ? ? ? ?android: layout_width="wrap_content"
? ? ? ? ?android : layout_height="wrap_content"
? ? ? ? ?android: onClick="cliokMe"
? ? ? ? ?android: text="單擊我"/>
?
BindTagActivity.java
?public void clickMe (view v){
? ? ?showTxt.setText ("綁定標(biāo)簽事件: btn按鈕被單擊了! ");
?}
基于回調(diào)機(jī)制的事件處理
Android為View中提供了五種事件處理的回調(diào)方法︰
onKeyDown()
onKeyUp()
onTouchEvent()
onTrackBallEvent()
onFocusChanged()
onKeyDown()方法
?public boolean onKeyDown (int keycode,KeyEvent event)
參數(shù)keyCode表示被按下的鍵值
參數(shù)event用于封裝按鍵事件的對(duì)象
返回值為boolean類型
常量名功能描述KEYCODE_CALL撥號(hào)鍵KEYCODE_ENDCALL掛機(jī)鍵KEYCODE_HOME按鍵HomeKEYCODE MENU菜單鍵KEYCODE_BACK返回鍵KEYCODE_SEARCH搜索鍵KEYCODE_ CAMERA拍照鍵KEYCODE_FOCUS拍照對(duì)焦鍵KEYCODE_POWER電源鍵KEYCODE_NOTIFICATION通知鍵KEYCODE_MUTE話筒靜音鍵KEYCODE_VOLUME_MUTE揚(yáng)聲器靜音鍵KEYCODE_VOLUME_UP音量增加鍵KEYCODE_VOLUME_DOWN音量減小鍵KEYCODE_ CALL撥號(hào)鍵KEYCODE_ENDCALL掛機(jī)鍵
捕捉手機(jī)鍵盤被按下的事件
?public boolean onKeyDown (int keyCode,KeyEvent event){
? ? ?//重寫的鍵盤按下監(jiān)聽(tīng)
? ? ?switch (keycode) {
? ? ? ? ?case KeyEvent . KEYCODE_BACK:
? ? ? ? ? ? ?showText.setText ("點(diǎn)擊了【回退鍵】") ;break ;
? ? ? ? ?case KeyEvent. KEYCODE_A:
? ? ? ? ? ? ?showText.setText("點(diǎn)擊了【A鍵】");break;
? ? ?}
? ? ?return true;
?}
?
onKeyUp()方法
用來(lái)捕捉手機(jī)鍵盤按鍵抬起的事件
?public boolean onkeyUp (int keyCode,KeyEvent event)
參數(shù)keyCode表示觸發(fā)事件的按鍵碼
參數(shù)event是一個(gè)事件封裝類的對(duì)象
返回值為boolean類型
onTouchEvent()方法
用來(lái)處理手機(jī)屏幕的觸摸事件
?public boolean onTouchEvent (MotionEvent event)
參數(shù)event是手機(jī)屏幕觸摸事件封裝類的對(duì)象,用于封裝件的相關(guān)信息
返回值為boolean類型
自定義的View并不會(huì)自動(dòng)刷新,所以每次改變數(shù)據(jù)模型時(shí)都需要手動(dòng)調(diào)用postInvalidate(方法進(jìn)行屏幕的刷新操作。
處理手機(jī)屏幕的觸摸事件
?//重寫的onTouchEvent回調(diào)方法override
?public boolean onTouchEvent (MotionEvent event) {
? ? ?switch (event.getAction () ){
? ? ? ? ?case MotionEvent .ACTION_DOWN://手指按下
? ? ? ? ?case MotionEvent . ACTION_MOVE://手指移動(dòng)
? ? ? ? ?case MotionEvent .ACTION_UP://手指抬起
? ? ?}
? ? ?return super.onTouchEvent (event);
?}
onTrackBa llEvent()方法
用來(lái)處理手機(jī)中軌跡球事件
?public Boolean onTrackballEvent (MotionEvent event)
軌跡球與手機(jī)鍵盤有一定區(qū)別
某些型號(hào)的手機(jī)設(shè)計(jì)出的軌跡球會(huì)比只有手機(jī)鍵盤時(shí)更美觀
軌跡球使用更為簡(jiǎn)單
使用軌跡球會(huì)比鍵盤更為細(xì)化
在模擬器運(yùn)行狀態(tài)下,可以通過(guò)F6鍵打開(kāi)模擬器的軌跡球,然后通過(guò)鼠標(biāo)的移動(dòng)來(lái)模擬軌跡球事件。
onFocusChanged()方法
焦點(diǎn)改變的回調(diào)方法
?protected void onFocusChanged (Boolean gainFocus,int direction, Rect previouslyFocusedRect)
常見(jiàn)的焦點(diǎn)相關(guān)方法
方法功能描述setFocusable()用于設(shè)置View是否可以擁有焦點(diǎn)isFocusable()用于判斷View是否可以擁有焦點(diǎn)setNextFocusDownId()用于設(shè)置View的焦點(diǎn)向下移動(dòng)后獲得焦點(diǎn)View的IDhasFocus()用于判斷View的夫requestFocus()用于嘗試讓此View獲得焦點(diǎn)isFocusableTouchMode()用于設(shè)置View是否可以在觸摸模式下獲得焦點(diǎn),默認(rèn)情況下不可用
焦點(diǎn)改變事件回調(diào)
?//自定義Button
?class FocusButton extends Button {
? ? ?protected void onFocusChanged (boolean focused,int direction,Rect previouslyFocusedRect) {
? ? ? ? ?//...
? ? ?}
?)
?
每按下一次按鍵,會(huì)調(diào)用兩次onFocusChanged(方法,一次是某個(gè)按鈕失去焦點(diǎn)時(shí)調(diào)用,第二次是另一個(gè)按鈕獲得焦點(diǎn)時(shí)調(diào)用。
Widget組件通用屬性
Widget組件通用屬性
屬性名稱功能描述android:id設(shè)置控件的索引android:layout_height設(shè)置布局高度android:layout_width設(shè)置布局寬度android:autoLink設(shè)置是否當(dāng)文本為URL鏈接時(shí),文本顯示為可點(diǎn)擊的鏈接android:autoText如果設(shè)置,將自動(dòng)執(zhí)行輸入值的拼寫糾正android:bufferType指定getTextO方式取得的文本類別android:capitalize設(shè)置英文字母大寫類型。需要彈出輸入法才能看得到android:cursorVisible設(shè)定光標(biāo)為顯示/隱藏,默認(rèn)顯示
TextView類的XML屬性及描述
XML屬性功能描述android:layout_alignParentLeft指定該組件是否與布局容器左對(duì)齊android:autoLink設(shè)置是否當(dāng)文本為URL鏈接,文本顯示為可點(diǎn)擊的鏈接。android:autoText如果設(shè)置,將自動(dòng)執(zhí)行輸入值的拼寫糾正。android:digits設(shè)置允許輸入哪些字符。android:drawableLeft在text的左邊輸出一個(gè)drawableandroid:drawablePadding設(shè)置text與drawable(圖片)的間隔android:drawableRight在text的右邊輸出一個(gè)drawableandroid:drawableTop在text的正上方輸出一個(gè)drawableandroid:ellipsize設(shè)置當(dāng)文字過(guò)長(zhǎng)時(shí)如何顯示該控件android:gravity設(shè)置文本位置,例如如center表示文本將居中顯示android:hint設(shè)置文本為空時(shí)顯示的提示信息android:ems設(shè)置TextView的寬度為N個(gè)字符的寬度android:maxEms設(shè)置TextView的寬度為最長(zhǎng)為N個(gè)字符的寬度android:minEms設(shè)置TextView的寬度為最短為N個(gè)字符的寬度android:maxLength限制顯示的文本長(zhǎng)度,超出部分不顯示android:lines設(shè)置文本的行數(shù)android:maxLines設(shè)置文本的最大顯示行數(shù)android:minLines設(shè)置文本的最小行數(shù)android:linksClickable設(shè)置鏈接是否可以點(diǎn)擊android:lineSpacingExtra設(shè)置行間距android:lineSpacingMultiplier設(shè)置行間距的倍數(shù)android:numeric如果被設(shè)置,該控件將有一個(gè)數(shù)字輸入法android:password以小點(diǎn)“.”顯示文本android:phoneNumber設(shè)置為電話號(hào)碼的輸入方式android:scrollHorizontally設(shè)置文本超出TextView的寬度的情況下,出現(xiàn)橫向滾動(dòng)條android:selectAllOnFocus如果文本是可選的,使其獲取焦點(diǎn)android:shadowColor指定文本陰影的顏色android:shadowDx設(shè)置陰影橫向坐標(biāo)開(kāi)始位置android:shadowDy設(shè)置陰影縱向坐標(biāo)開(kāi)始位置android:shadowRadius設(shè)置陰影的半徑android:singleLine設(shè)置單行顯示android:text設(shè)置顯示文本android:textAppearance設(shè)置文字外觀android:textColor設(shè)置文本顏色android:textColorHighlight被選中文字的底色,默認(rèn)為藍(lán)色android:textColorHIint設(shè)置提示信息文字的顏色,默認(rèn)為灰色android:textColorLink文字鏈接的顏色android:textScalex設(shè)置文字縮放,默認(rèn)為1.0fandroid:textSize設(shè)置文字大小android:textStyle設(shè)置字形android:height設(shè)置文本區(qū)域的高度android:maxHeight設(shè)置文本區(qū)域的最大高度android:minHeight設(shè)置文本區(qū)域的最小高度android:width設(shè)置文本區(qū)域的寬度
在EditText中,常用的inputType屬性值
屬性值功能描述text普通文本,默認(rèn)textCapCharacters字母大寫textCapWords每個(gè)單詞的首字母大寫textAutoCorrect自動(dòng)完成textMultiLine多行輸入textNoSuggestions不提示textUri網(wǎng)址textEmailAddress電子郵件地址textEmailSubject郵件主題textShortmessage短訊textLongMessage長(zhǎng)信息textPassword密碼number數(shù)字numberSigned帶符號(hào)數(shù)字格式numberDecimal帶小數(shù)點(diǎn)的浮點(diǎn)格式phone撥號(hào)鍵盤datetime時(shí)間日期date日期鍵盤time時(shí)間鍵盤
Button類的常用方法
方法功能描述onKeyDown()當(dāng)用戶按鍵時(shí),該方法被調(diào)用onKeyUp()當(dāng)用戶按鍵彈起后,該方法被調(diào)用onKeyLongPress()當(dāng)用戶保持按鍵時(shí),該方法被調(diào)用onKeyMultiple()當(dāng)用戶多次按鍵時(shí),該方法被調(diào)用invalidateDrawable()用于刷新Drawable對(duì)象onPreDraw()用于設(shè)置視圖顯示setOnKeyListener()用于設(shè)置按鍵監(jiān)聽(tīng)器setOnClickListener()用于設(shè)置點(diǎn)擊監(jiān)聽(tīng)器onKeyDown()當(dāng)用戶按鍵時(shí),該方法被調(diào)用
單選按鈕和單選按鈕組
RadioButton:單個(gè)圓形單選框
RadioGroup:容納多個(gè)RadioButton的容器
同一個(gè)RadioGroup中,只能有一個(gè)RadioButton被選中不同的RadioGroup中,RadioButton互不影響
一個(gè)RadioGroup中至少有2個(gè)RadioButton
方法功能描述getCheckedRadioButtonld()獲取被選中按鈕的idclearCheck()清除選中狀態(tài)check(int id)通過(guò)參數(shù)id來(lái)設(shè)置該選項(xiàng)為選中狀態(tài)setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener listenre)在一個(gè)單選按鈕組中,當(dāng)該單選按鈕勾選狀態(tài)發(fā)生改變時(shí)所要調(diào)用的回調(diào)函數(shù)addView(View child,int index,ViewGroup.LayoutParams params)使用指定的布局參數(shù)添加一個(gè)子視圖getText()用于獲取單選框的值
開(kāi)關(guān)控件
ToggleButton
XML屬性對(duì)應(yīng)方法功能描述android:checkedsetChecked(boolean)設(shè)置該按鈕是否被選中android:textOffsetTextOff(CharSquence)設(shè)置按鈕的狀態(tài)關(guān)閉時(shí)所顯示的文本androidtextOnsetTextOn(CharSquence)設(shè)置按鈕的狀態(tài)打開(kāi)時(shí)所顯示的文本android:switchMinWidthsetSwitchMin Width(int)設(shè)置開(kāi)關(guān)的最小寬度android:textStylesetSwitchTypeface (Typeface , int)設(shè)置開(kāi)關(guān)的文本風(fēng)格android:typefacesetSwitchTypeface(Typeface)設(shè)置開(kāi)關(guān)的文本的字體風(fēng)格android:switchPaddingsetSwitchPadding(int)設(shè)置開(kāi)關(guān)與標(biāo)題文本之間的空白android:thumbsetThumbResource(int)使用自定義的Drawable來(lái)繪制開(kāi)關(guān)的開(kāi)關(guān)按鈕android:tracksetTrackResource(int)使用自定義的Drawable來(lái)繪制開(kāi)關(guān)的開(kāi)關(guān)軌道
圖片視圖(ImageView)
繼承自View組件
用于顯示圖像資源
XML屬性對(duì)應(yīng)方法功能描述android:adjustViewBoundssetAdjustViewBounds(boolean)是否保持寬高比android:cropToPaddingsetCropToPadding(boolean)截取指定區(qū)域是否使用空白代替android:maxHeightsetMaxHeight(int)設(shè)置View的最大高度android:maxWidthsetMaxWidth(int)設(shè)置View的最大寬度android:srcsetimageResource(int)設(shè)置ImageView所顯示的Drawable對(duì)象android:scaleTypesetScaleType(ImageView.ScaleType)設(shè)置所顯示的圖片如何縮放或移動(dòng)以適應(yīng)ImageView的大小
實(shí)現(xiàn)頁(yè)面的切換功能,可以使用ViewPager類;該類是Android Support Liberary中自帶的一個(gè)附加包的一個(gè)類,用來(lái)實(shí)現(xiàn)屏幕間的切換。
Dialog對(duì)話框
4種對(duì)話框
AlertDialog提示對(duì)話框
ProgressDialog進(jìn)度條對(duì)話框
DatePickerDialog日期對(duì)話框
TimePickerDialog時(shí)間對(duì)話框
AlertDialog提示對(duì)話框
AlertDialog繼承自Dialog類
使用Builder內(nèi)部類進(jìn)行創(chuàng)建
可以包含一個(gè)標(biāo)題、一個(gè)內(nèi)容消息或者一個(gè)選擇列表以及0至3個(gè)按鈕。
方法功能描述void create()根據(jù)設(shè)置的屬性,創(chuàng)建一個(gè)AlterDialogvoid show()根據(jù)設(shè)置的屬性,顯示已創(chuàng)建的AlterDialogAlterDialog.Builder setTitle()設(shè)置標(biāo)題AlterDialog.Builder setIcon()設(shè)置標(biāo)題的圖標(biāo)AlterDialog.Builder setMessage()設(shè)置標(biāo)題的內(nèi)容AlterDialog.Builder setCancelable()設(shè)置是否模態(tài)AlterDialog setPositiveButton()為對(duì)話框添加Yes按鈕AlterDialog setNegativeButton為對(duì)話框添加No按鈕
ProgressDialog進(jìn)度對(duì)話框
ProgressDialog有兩種顯示方式∶
滾動(dòng)的環(huán)狀圖標(biāo)
帶刻度的進(jìn)度條
通過(guò)ProgressDialog.setProgressStyle()方法進(jìn)行設(shè)置:
STYLE_HORIZONTAL———刻度滾動(dòng)
STYLE_SPINNER——圖標(biāo)滾動(dòng),默認(rèn)選項(xiàng)
ProgressBar進(jìn)度條
ProgressBar繼承于View類
ProgressBar常用屬性
android:max:進(jìn)度條的最大值
android:progress:進(jìn)度條已完成進(jìn)度值
android:progressDrawable :設(shè)置軌道對(duì)應(yīng)的Drawable對(duì)象
android:indeterminate :如果設(shè)置成true,則進(jìn)度條不精確顯示進(jìn)度
android:indeterminateDrawable :設(shè)置不顯示進(jìn)度的進(jìn)度條的Drawable對(duì)象
android:indeterminateDuration :設(shè)置不精確顯示進(jìn)度的持續(xù)時(shí)間
android:secondaryProgress:二級(jí)進(jìn)度條,類似于視頻播放的一條是當(dāng)前播放進(jìn)度,—條是緩沖進(jìn)度,前者通過(guò)progress屬性進(jìn)行設(shè)置!
ProgressBar對(duì)應(yīng)于Java中的可調(diào)用方法
getMax():返回這個(gè)進(jìn)度條的范圍的上限
getProgress():返回進(jìn)度
getSecondaryProgress():返回次要進(jìn)度
incrementProgressBy(int diff)︰指定增加的進(jìn)度
isIndeterminate()∶指示進(jìn)度條是否在不確定模式下
setIndeterminate(boolean indeterminate):設(shè)置不確定模式下
ProgressBar的樣式設(shè)定有兩種
—種是通過(guò)組件屬性設(shè)置
另一種是通過(guò)樣式style進(jìn)行設(shè)置
ProgressBar常見(jiàn)的幾種樣式
橫向progressBarStyleHorizontal
橫向Widget.ProgressBar.Horizontal
圓形progressBarStyleLarge
Android中Seekbar
Seekbar的幾個(gè)重要屬性
android:max設(shè)置值的大小.
android:thumb= “@drawable/”顯示的那個(gè)可拖動(dòng)圖標(biāo),如果沒(méi)有設(shè)置該參數(shù)則為系統(tǒng)默認(rèn),如果自己需要重新定義,則將自己需要的圖標(biāo)存放在資源目錄/res/drawable下,然后調(diào)用即可.
android:thumbOffset 拖動(dòng)圖標(biāo)的偏量值可以讓拖動(dòng)圖標(biāo)超過(guò)bar的長(zhǎng)度.
android:progress設(shè)置seekbar當(dāng)前的默認(rèn)值,范圍0到max之間.
android:secondaryProgress 用過(guò)的迅雷的都知道拖動(dòng)圖標(biāo)隨著當(dāng)前的播放時(shí)間的走動(dòng)而走動(dòng),同時(shí)我們也注意到了也有個(gè)緩沖看到的進(jìn)度條,這個(gè)屬性就是用來(lái)設(shè)置默認(rèn)顯示的值為多少,范圍為0到max.
android:progressDrawable 當(dāng)我們不想使用系統(tǒng)默認(rèn)的SeekBar時(shí)可以自己定義一個(gè),這個(gè)資源文件就是用來(lái)調(diào)用我們自己定義的Seekbar圖標(biāo)的一般是在drawable下建立一個(gè).xml文件s用layer-list來(lái)組織這些圖標(biāo).
一般在做到音頻播放和音樂(lè)播放時(shí),大多數(shù)都要用到seekbar
Android中RatingBar
RatingBar是ProgressBar的一個(gè)延伸,ProgressBar的進(jìn)度一般由代碼控制,RatingBar的進(jìn)度可以拖拽來(lái)控制。
RatingBar的4個(gè)屬性
android:isIndicator RatingBar的指示是否起作用,默認(rèn)為false,如果為true ,RatingBar的進(jìn)度不能被人為修改。
android:numStars顯示星星的總數(shù)量,必須為整數(shù)。
android:rating設(shè)置默認(rèn)評(píng)分值,值為浮點(diǎn)數(shù)。
android:stepSize評(píng)分每次增加的值(最小變化值),值為浮點(diǎn)數(shù)
一般類似于打車軟件和訂餐軟件上的五星好評(píng)的UI均可以利用RatingBar完美實(shí)現(xiàn)這個(gè)效果。
RatingBar的系統(tǒng)樣式有三種:
?style=" ?attr/ ratingBarstyle"或
?style="@style/widget .AppCompat.RatingBar"?style="?attr/ ratingBarstyleIndicator"或
?style="@style/widget.AppCompat.RatingBar.Indicator"?style=" ?attr/ ratingBarstyleSmall"或
?style="@style/widget.AppCompat.RatingBar.Small"小型樣式
默認(rèn)樣式
默認(rèn)樣式
RatingBar的事件監(jiān)聽(tīng)
?ratingBar.setOnRatingBarChangeListener (newRatingBar . OnRatingBarChangeListener () {
? ? ?@override
? ? ?public void onRatingChanged (RatingBar ratingBar, float rating, boolean fromUser) {
? ? ? ? ?//...
? ? ?}
?});
?