超全的Android组件及UI框架
設(shè)計和代碼切換,一般情況下,我們 UI 布局都是先拖再細(xì)調(diào)整,也就是先用設(shè)計默認(rèn)拖出一個大概的布局,然后用代碼來微調(diào)
一、常見的布局
1.?LinearLayout 線性布局
LinearLayout 幾個重要的 XML 屬性
xml 屬性?? ?說明
android:id?? ?為組件設(shè)置一個資源 id,然后在 Java 中可以通過?findViewById(id)?找到該組件
android:background?? ?為組件設(shè)置一個背景圖片或者背景色
android:layout_width?? ?布局的寬度,通常不直接寫數(shù)字值,而是使用
wrap_content 組件實際大小
fill_parent/match_parent 填滿父容器
android:layout_height?? ?同 layout:layout_width
android:baselineAligned?? ?該屬性為 false,將會阻止布局管理器與它的子元素基線對其
android:divider?? ?設(shè)置垂直布局時,兩個按鈕之間的分隔條
android:gravity?? ?設(shè)置布局管理器內(nèi)組件的對齊方式,值可以是
top/button/left/right/center_vertical/fill_vertical...
android:measureWithLargestChild?? ?當(dāng)屬性設(shè)置為true時,所有帶權(quán)重的子元素都會具有最大元素的最小尺寸
android:orientation?? ?設(shè)置布局管理器內(nèi)組件的排列方式,值可以是
vertical (默認(rèn))
horizontal
android:layout_gravity="left" ? ?位于LinearLayout的最左側(cè)
2.?RelativeLayout 相對布局
重點:相對布局 (RelativeLayout) 以 父容器 或者 兄弟組件 參考+margin +padding 來設(shè)置組件的顯示位置
1. 基本屬性
XML 屬性?? ?說明
android:gravity?? ?設(shè)置容器內(nèi)組件的排序方式
android:ignoreGravity?? ?如果設(shè)置改屬性為 true,將忽略?android:gravity
android:gravity?本元素所有子元素的重力方向,處于怎樣子的位置?,有:
top?將對象放在其容器的頂部,不改變其大小.?
bottom?將對象放在其容器的底部,不改變其大小.?
left將對象放在其容器的左側(cè),不改變其大小.?
right將對象放在其容器的右側(cè),不改變其大小.?
center_vertical?將對象縱向居中,不改變其大小.?
android:layout_gravity?和?android:gravity?的區(qū)別:
比如說對于Button控件:
?
android:layout_gravity?表示button在界面上的位置
android:gravity表示button上的字在button上的位置。
?
2.根據(jù)父容器定位屬性:
XML 屬性?? ?說明
android:layout_alignParentLeft?? ?左對齊父容器
android:layout_alignParentRight?? ?右對齊父容器
android:layout_alignParentTop?? ?頂部對齊父容器
android:layout_alignParentBottom?? ?底部對齊父容器
android:layout_centerHorizontal?? ?在父容器中水平居中
android:layout_centerVertical?? ?在父容器中垂直居中
android:layout_centerInParent?? ?在父容器的居中位置
各個屬性示意圖如下:
3. 根據(jù)兄弟組件定位屬性
兄弟組件定位就是處于同一層次容器的組件
圖中的組件1,2就是兄弟組件了,
如對于組件2 :android:layout_right = "@id/組件1"
而組件3與組件1或組件2并不是兄弟組件,所以組件3 不能通過 組件1或 2來進(jìn)行定位
4. 設(shè)置外邊距(偏移)屬性
上面這些屬性用于設(shè)置組件對本來位置的偏移量
虛線框是組件2?本來的位置,如果設(shè)置了組件上邊和左邊的邊距,則位置會發(fā)生一定的偏移,向右下偏移
5. 設(shè)置內(nèi)邊距(填充)屬性
上面這些屬性用于設(shè)置組件的內(nèi)邊距,內(nèi)邊距主要用于設(shè)置組件邊框和子組件之間的間隙
6. 居中設(shè)置
android:layout_centerHorizontal 如果為true,將該控件的置于水平居中;
android:layout_centerVertical 如果為true,將該控件的置于垂直居中;
android:layout_centerInParent 如果為true,將該控件的置于父控件的中央;
?
二、常用控件
?1. TextView 文本框
TextView 繼承于 View
1.1 常用屬性
跑馬燈效果:
識別鏈接效果:
android:autoLink?屬性用于設(shè)置 TextView 是否識別鏈接類型和設(shè)置可識別的鏈接類型
android:autoLink?的值有以下幾種
設(shè)置 TextView 字間距
屬性?android:textScaleX?控制字體水平方向的縮放,默認(rèn)值 1.0f,類型值是 float
如: setScaleX(2.0f);
設(shè)置 TextView 行間距
Android TextView 默認(rèn)顯示中文時會比較緊湊,為了讓每行保持的行間距,可以設(shè)置如下屬性
如:setLineSpacing(1.5)?
1.2 常用方法
void append(CharSequence text); //增加文字
CharSequence getText(); // 獲取文章文字
int getTextSize();?
int length();
2.?EditText 輸入框
EditText 繼承于 TextView
2.1 常用屬性
?
android:inputType?:對輸入文本類型進(jìn)行限制
文本類型,多為大寫、小寫和數(shù)字符號
android:inputType="none" android:inputType="text" android:inputType="textCapCharacters" android:inputType="textCapWords" android:inputType="textCapSentences" android:inputType="textAutoCorrect" android:inputType="textAutoComplete" android:inputType="textMultiLine" android:inputType="textImeMultiLine" android:inputType="textNoSuggestions" android:inputType="textUri" android:inputType="textEmailAddress" // 郵箱類型 android:inputType="textEmailSubject" android:inputType="textShortMessage" android:inputType="textLongMessage" android:inputType="textPersonName" android:inputType="textPostalAddress" android:inputType="textPassword" // 密碼 android:inputType="textVisiblePassword" android:inputType="textWebEditText" android:inputType="textFilter" android:inputType="textPhonetic"?數(shù)值類型
android:inputType="number" android:inputType="numberSigned" android:inputType="numberDecimal" android:inputType="phone" // 撥號鍵盤 android:inputType="datetime" android:inputType="date" // 日期鍵盤 android:inputType="time" // 時間鍵盤2.2 常用方法
TextView 的方法,EditText 都有
.setText("success");
3.?ImageView 圖像視圖
3.1 常用屬性
ImageView 有 2中屬性,分為為: src, backgroud,他們之間的區(qū)別是:
?設(shè)置縮小放大的大小
?
3.2 常用方法
@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.button:imageView.setImageResource(R.drawable.image_2); // 修改圖片break;default:break;}}4. Button 按鈕
4.1 常用屬性
1. Button 繼承自 TextView ,所以可以 使用 TextView 的那些屬性
2. 我們可以將 Button 的?android:background?屬性設(shè)置為該 drawable 資源即可輕松實現(xiàn)按下 按鈕時不同的按鈕顏色或背景
下表列出了可以設(shè)置的屬性
在?res/drawable?目錄下新建一個按鈕狀態(tài)的資源文件?btn_bg.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true" android:drawable="@drawable/btn_pressed"/><item android:state_enabled="false" android:drawable="@drawable/btn_disabled"/><item android:drawable="@drawable/btn_normal"/> </selector>?4.2 監(jiān)聽方法
1. 一個按鈕的監(jiān)聽方法
button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//點擊Button會改變edittext的文字為"點擊了Button"edittext.setText("點擊了Button");}});?2. 繼承于接口 OnClickListener 的監(jiān)聽方法
public class MainActivity extends Activity implements OnClickListener {private EditText edittext;private Button button;private Button button2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);edittext=(EditText) findViewById(R.id.edit_text);button = (Button) findViewById(R.id.button);button2 = (Button) findViewById(R.id.button2);button.setOnClickListener(this);button2.setOnClickListener(this);}@Override//用switch區(qū)分是哪個idpublic void onClick(View v) {switch (v.getId()){case R.id.button:edittext.setText("點擊了Button");break;case R.id.button2:edittext.setText("點擊了Button2");break;}} }?
5. RadioButton 單選按鈕
5.1 常用屬性
RadioButton 單選按鈕就是只能夠選中一個,所以我們需要把 RadioButton 放到 RadioGroup 按鈕組中,從而實現(xiàn)單選功能
RadioButton?繼承自?Button,所以擁有?Button?的所有公開屬性和方法
RadioButton?只有兩個狀態(tài),選中與未選中,所以也就只有一個屬性是最重要的,那就是?android:checked
| android:checked | 設(shè)置或獲取?RadioButton?的選中狀態(tài) |
如果?RadioButton?未選中,那么點擊它可以讓它選中,但反過來是不可以的,就是不能從選中狀態(tài)到未選中狀態(tài)
5.2 監(jiān)聽方法
RadioGroup?是單選組合框,用于 將 RadioButton 框起來。在多個 RadioButton被 RadioGroup 包含的情況下,同一時刻只可以選擇一個 RadioButton,并用 setOnCheckedChangeListener 來對 RadioGroup 進(jìn)行監(jiān)聽。
?
6. RadioGroup 單選按鈕組
6.1 常用屬性
要實現(xiàn) RadioButton?的 單選功能,需要把所有的?RadioButton?放到?RadioGroup?里面
?用于將幾個?RadioButton?組在一起形成單選按鈕組,實現(xiàn)單選功能,也就是選中一個,會取消其它選項的選中
RadioGroup?只提供了一個 XML 屬性?android:checkedButton?用于指定初始化時選中的 ID
| android:checkedButton | 初始化時選中的選項 ID (android:id) |
?
RadioGroup?提供了很多方法用于選中或者獲取選中的選項 ID ,下面列出常用的幾個
| check(int id) | 根據(jù) id 選中某個選項 |
| clearCheck() | 清除所有選項的選中狀態(tài),也就時一個都沒選中 |
| getCheckedRadioButtonId() | 獲取選中的選項 id |
| OnCheckedChangeListener | 當(dāng)?RadioGroup?中的某個選項被選中時觸發(fā) |
7. CheckBox 復(fù)選框
?
7.1 常用屬性
Android CheckBox (復(fù)選框) 繼承自?Button?,可以說是只有兩種狀態(tài)的按鈕 (選中或未選中狀態(tài))
可以把多個?CheckBox?放在一起實現(xiàn)同時選中多項,但是,記住,它們之間沒有任何關(guān)系,一個的選中并不會影響另一個選中或者不選中
?
CheckBox?除了從?Button?繼承而來的屬性外,沒有自己的屬性,但從?CompoundButton?繼承了一個屬性?android:checked?用于表示是否選中
| android:checked | 設(shè)置或者獲取?CheckBox?是否選中 |
?
7.2 監(jiān)聽方法
CheckBox?提供了幾個方法和事件用于設(shè)置或者獲取自身是否選中狀態(tài)
| isChecked() | 判斷自身是否選中 |
| setChecked(boolean checked) | 設(shè)置自身是否選中狀態(tài) |
?
| OnCheckedChangeListener | 選中狀態(tài)改變監(jiān)聽器,當(dāng)自身選中狀態(tài)變化時會觸發(fā)這個事件 |
?
8. ToggleButton 開關(guān)按鈕
8.1 常用屬性
ToggleButton (開關(guān)按鈕) 允許我們在兩個狀態(tài)之間切換,有點類似于電燈的開關(guān)
ToggleButton?和?CheckBox?一樣都繼承自?CompoundButton?,所以都有?Button?的屬性和方法,又有?CompoundButton?的屬性?android:checked
8.2 監(jiān)聽方法
ToggleButton?提供了一些方法用來改變或獲取自身的狀態(tài)和開關(guān)時的文本
9. Switch 開關(guān)
9.1 常用屬性
允許我們在兩個狀態(tài)之間切換,有點類似于現(xiàn)在流行的滑動解鎖
Switch (開關(guān)) 也繼承自?Button?和?CompoundButton,所以擁有它們的屬性、方法和事件
不過?Switch?也擁有自己的屬性,而且特別的多
9.2 監(jiān)聽方法
Switch?提供了一些方法用來改變或獲取自身的狀態(tài)和開關(guān)時的文本
10. ProgressBar 進(jìn)度條
10.1 常用屬性
?ProgressBar(進(jìn)度條) 可以用來顯示一個操作的進(jìn)度,一般用于比較耗時的地方,比如下載進(jìn)度條,比如加載等待
ProgressBar?有兩種模式,確定性?和?不確定性的?,有兩種外觀模式,條形?和?圓形,所以總共有四種,這涉及到兩個屬性
?其他屬性
10.2 監(jiān)聽方法
11. SeekBar ( 拖動條 ) 控件
11.1 常用屬性
SeekBar ( 拖動條 ) 控件一般用于音樂播放器或者視頻播放器的音量控制或者播放進(jìn)度控制
SeekBar 是?ProgressBar?的子類,所以 ProgressBar的屬性都可以用
SeekBar 有以下幾個簡單的屬性
11.2 監(jiān)聽方法
SeekBar 內(nèi)置了?SeekBar.OnSeekBarChangeListener?事件
該事件會觸發(fā)三個方法
完畢。
總結(jié)
以上是生活随笔為你收集整理的超全的Android组件及UI框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .Net软件工程师必备面试题134道
- 下一篇: Android中SQLlite数据库的增