Android入門-第三章-Android常用控制項的使用方式
- 2020 年 2 月 19 日
- 筆記
一、Android常用控制項的使用方式
1.1 TextView
TextView可以說是Android中最簡單的一個控制項了,你在前面其實已經和它打過一些交道了。它主要用於在介面上顯示一段文本資訊,比如你在第1章看到的「Hello world!」。下面我們就來看一看關於TextView的更多用法。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="This is TextView" /> </LinearLayout>
外面的LinearLayout先忽略不看,下面是上述XML英文組合的具體解釋:
英文組合 |
中文含義 |
---|---|
android:id |
控制項的唯一標識符,用於被活動以R文件屬性的方式引用這個控制項 |
android:layout_width |
控制項的寬度 |
android:layout_height |
控制項的高度 |
「match_parent」 |
讓當前控制項的大小和父布局的大小一樣,也就是由父布局來決定當前控制項的大小。如果父布局是View,那麼寬度就是和手機螢幕一樣的寬度。 |
「wrap_content」 |
讓當前控制項的大小能夠剛好包含住裡面的內容,也就是由控制項內容決定當前控制項的大小。 |
android:text |
TexyView控制項內具體顯示的文本內容 |
android:gravity |
控制項內文字對齊方式 |
「center」 |
垂直和水平均居中,即效果等同於center_vertical:center_vertical |
android:textSize=「24sp」 |
字體大小設置為24sp |
android:textColor="#00ff00" |
設置字體顏色為:"#00ff00"值 |
接下來我們通過android:text 指定TextView中顯示的文本內容,現在運行程式,效果如圖3.1所示。

雖然指定的文本內容正常顯示了,不過我們好像沒看出來TextView的寬度是和螢幕一樣寬的。其實這是由於TextView中的文字默認是居左上角對齊的,雖然TextView的寬度充滿了整個螢幕,可是由於文字內容不夠長,所以從效果上完全看不出來。現在我們修改TextView的文字對齊方式,如下所示:
在中加入:android:gravity ="center"
語句就將字元居中了。總結一下:我們使用android:gravity
來指定文字的對齊方式,可選值有top 、bottom 、left 、right 、center 等,可以用「|」來同時指定多個值,這裡我們指定的center ,效果等同於center_vertical|center_horizontal ,表示文字在垂直和水平方向都居中對齊。現在重新運行程式,效果如圖3.2所示。

另外我們還可以對TextView中文字的大小和顏色進行修改,如下所示:
同樣地,在中加入:android:textSize="24sp"
以及android:textColor="#00ff00"
當然TextView中還有很多其他的屬性,這裡就不再一一介紹了,用到的時候去查閱文檔就可以了。
1.2 Buttion
Button是程式用於和用戶進行交互的一個重要控制項,相信你對這個控制項已經非常熟悉了,因為我們在上一章用了太多次Button。它可配置的屬性和TextView是差不多的,所以下標就給出一個不同的屬性設置方式:
英文組合 |
中文含義 |
---|---|
android:textAllCaps=「false」 |
取消字體默認大寫的設置 |
我們可以在activity_main.xml中這樣加入Button:
<Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="button" />
雖然再xml配置文件中設置按鍵名為小寫,但是最終在design中顯示的卻是大寫的BUTTON,這是由於系統會對Button中的所有英文字母自動進行大寫轉換,如果這不是你想要的效果,可以使用如下配置來禁用這一默認特性:加入描述語句:android:textAllCaps="false"
接下來我們可以在MainActivity中為Button的點擊事件註冊一個監聽器,如下所示:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 在此處添加邏輯 } }); } }
方式一的具體步驟:
當前活動繼承AppCompatActicity類 -> 重寫onCreate()方法 -> {調用引入布局方法:setContentView -> 使用findViewById方法根據R文件創建Buttion對象引用 -> Button對象調用setclickListener()方法,參數為重寫了Onclick方法的匿名內部類OnClickListener對象{在此編寫按鍵的內部執行邏輯}
這樣每當點擊按鈕時,就會執行監聽器中的onClick() 方法,我們只需要在這個方法中加入待處理的邏輯就行了。如果你不喜歡使用匿名類的方式來註冊監聽器,也可以使用實現介面的方式來進行註冊,程式碼如下所示:
public class MainActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button: // 在此處添加邏輯 break; default: break; } } }
方式二的具體步驟:
當前活動繼承AppCompatActivity 以及實現了View.OnClickListener(這是定義在View類中的公共介面) -> 重寫onCreate()方法 -> {調用引入布局方法:setContentView -> 使用findViewById方法根據R文件創建Buttion對象引用 -> Button對象調用setclickListener()方法,參數為實現了View.OnClickListener介面的當前對象this } ->重寫onClick方法{在此添加案件的內部執行邏輯}
這兩種寫法都可以實現對按鈕點擊事件的監聽,至於使用哪一種就全憑你的喜好了。
1.3 EditText
英文組合 |
中文含義 |
---|---|
android:hint |
小提示 |
android:maxLines |
限制EditText控制項的最大行數 |
EditText是程式用於和用戶進行交互的另一個重要控制項,它允許用戶在控制項里輸入和編輯內容,並可以在程式中對這些內容進行處理。EditText的應用場景非常普遍,在進行發簡訊、發微博、聊QQ等操作時,你不得不使用EditText。那我們來看一看如何在介面上加入EditText吧,修改activity_main.xml中的程式碼,如下所示:
<EditText android:id="@+id/edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" />
其實看到這裡,我估計你已經總結出Android控制項的使用規律了,用法基本上都很相似:給控制項定義一個id,再指定控制項的寬度和高度,然後再適當加入一些控制項特有的屬性就差不多了。
所以使用XML來編寫介面其實一點都不難,完全可以不用藉助任何可視化工具來實現。現在重新運行一下程式,EditText就已經在介面上顯示出來了,並且我們是可以在裡面輸入內容的
細心的你平時應該會留意到,一些做得比較人性化的軟體會在輸入框里顯示一些提示性的文字,然後一旦用戶輸入了任何內容,這些提示性的文字就會消失。這種提示功能在Android里是非常容易實現的,我們甚至不需要做任何的邏輯控制,因為系統已經幫我們都處理好了。修改activity_main.xml,如下所示:
加入新的描述語句:android:hint="Type something here"
,其中hint就是暗示的意思,效果就是如下圖所示:

可以看到,EditText中顯示了一段提示性文本,然後當我們輸入任何內容時,這段文本就會自動消失。
不過,隨著輸入的內容不斷增多,EditText會被不斷地拉長。這時由於EditText的高度指定的是wrap_content ,因此它總能包含住裡面的內容,但是當輸入的內容過多時,介面就會變得非常難看。我們可以使用android:maxLines 屬性來解決這個問題,修改activity_main.xml,如下所示:
加入描述性語句:
android:maxLines="2"
這裡通過android:maxLines 指定了EditText的最大行數為兩行,這樣當輸入的內容超過兩行時,文本就會向上滾動,而EditText則不會再繼續拉伸。
我們還可以結合使用EditText與Button來完成一些功能,比如通過點擊按鈕來獲取EditText中輸入的內容。修改MainActivity中的程式碼,如下所示:
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button); editText = (EditText) findViewById(R.id.edit_text); button.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button: String inputText = editText.getText().toString(); Toast.makeText(MainActivity.this, inputText, Toast.LENGTH_SHORT).show(); break; default: break; } } }
首先通過findViewById()
方法得到EditText的實例,然後在按鈕的點擊事件里調用EditText的getText()
方法獲取到輸入的內容,再調用toString()
方法轉換成字元串,最後還是老方法,使用Toast將輸入的內容顯示出來。
重新運行程式,在EditText中輸入一段內容,然後點擊按鈕,效果如下圖所示。

1.4 ImageView
英文組合 |
中文含義 |
---|---|
android:src |
指定文件的源,比如說一張圖片對應的源 |
imageView.setImageResource(R.drawable.img_2); |
源路徑是可以通過活動中的方法修改的,那麼一來可能就會導致改變顯示的圖片 |
ImageView是用於在介面上展示圖片的一個控制項,它可以讓我們的程式介面變得更加豐富多彩。學習這個控制項需要提前準備好一些圖片,圖片通常都是放在以「drawable」開頭的目錄下的。目前我們的項目中有一個空的drawable目錄,不過由於這個目錄沒有指定具體的解析度,所以一般不使用它來放置圖片。這裡我們在res目錄下新建一個drawable-xhdpi目錄,然後將事先準備好的兩張圖片img_1.png和img_2.png複製到該目錄當中。
接下來修改activity_main.xml,如下所示,加入一下語句:
<ImageView android:id="@+id/image_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/img_1" />
可以看到,這裡使用android:src 屬性給ImageView指定了一張圖片。由於圖片的寬和高都是未知的,所以將ImageView的寬和高都設定為wrap_content ,這樣就**保證了不管圖片的尺寸是多少,圖片都可以完整地展示出來。**重新運行程式,效果如下圖所示:

我們還可以在程式中通過程式碼動態地更改ImageView中的圖片,然後修改MainActivity的程式碼,如下所示:
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText editText; private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button); editText = (EditText) findViewById(R.id.edit_text); imageView = (ImageView) findViewById(R.id.image_view); button.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button: imageView.setImageResource(R.drawable.img_2); break; default: break; } } }
在按鈕的點擊事件里,通過調用ImageView的setImageResource()
方法將顯示的圖片改成img_2,現在重新運行程式,然後點擊一下按鈕,就可以看到ImageView中顯示的圖片改變了。
1.5 ProgressBar以及控制項的可見性
英文組合 |
中文含義 |
---|---|
android:visibility |
控制文件的可見性,有不可見佔大小、不可見不佔大小、可見等分類 |
setVisibility() |
活動中控制可見性的方法,傳入數據為:View.VISIBLE 、View.INVISIBLE 和View.GONE |
style |
控制進度條的格式,默認的進度條為動態的環形,可以改為拖動條 |
android:max |
用於給拖動條設置最大大小,調用活動的方法時就能改變拖動條的當前值,達到最大值時,拖動條相當於就到了100% |
ProgressBar用於在介面上顯示一個進度條,表示我們的程式正在載入一些數據。它的用法也非常簡單,修改activity_main.xml中的程式碼,如下所示:
<ProgressBar android:id="@+id/progress_bar" android:layout_width="match_parent" android:layout_height="wrap_content" />

這時你可能會問,旋轉的進度條表明我們的程式正在載入數據,那數據總會有載入完的時候吧?如何才能讓進度條在數據載入完成時消失呢?這裡我們就需要用到一個新的知識點:**Android控制項的可見屬性。**所有的Android控制項都具有這個屬性,可以通過android:visibility 進行指定,可選值有3種:visible 、invisible 和gone 。
- visible 表示控制項是可見的,這個值是默認值,不指定android:visibility 時,控制項都是可見的。
- invisible 表示控制項不可見,但是它仍然佔據著原來的位置和大小,可以理解成控制項變成透明狀態了。
- gone 則表示控制項不僅不可見,而且不再佔用任何螢幕空間。
我們還可以通過程式碼來設置控制項的可見性,使用的是setVisibility() 方法,可以傳入View.VISIBLE 、View.INVISIBLE 和View.GONE 這3種值。
@Override public void onClick(View v) { switch (v.getId()) { case R.id.button: if(imageView.getVisibility() == View.INVISIBLE){ imageView.setVisibility(View.VISIBLE); }else{ imageView.setVisibility(View.INVISIBLE); } break; default: break; } }
通過以上程式碼就可以通過按鈕點擊事件來控制圖片的顯示或不現實,當然此處的程式碼實現的是不釋放原來所佔空間的隱藏實現方式。
另外,我們還可以給ProgressBar指定不同的樣式,剛剛是圓形進度條,通過style 屬性可以將它指定成水平進度條,修改activity_main.xml中的程式碼,如下所示:
style="?android:attr/progressBarStyleHorizontal" android:max="100"
指定成水平進度條後,我們還可以通過android:max 屬性給進度條設置一個最大值,然後在程式碼中動態地更改進度條的進度。修改MainActivity中的程式碼,如下所示:
public class MainActivity extends AppCompatActivity implements View.OnClickListener { ... @Override public void onClick(View v) { switch (v.getId()) { case R.id.button: int progress = progressBar.getProgress(); progress = progress + 10; progressBar.setProgress(progress); break; default: break; } } }
1.6 AlertDialog
AlertDialog可以在當前的介面彈出一個對話框,這個對話框是置頂於所有介面元素之上的,能夠屏蔽掉其他控制項的交互能力,因此AlertDialog一般都是用於**提示一些非常重要的內容或者警告資訊。**比如為了防止用戶誤刪重要內容,在刪除前彈出一個確認對話框。下面我們來學習一下它的用法,修改MainActivity中的程式碼,如下所示:
@Override public void onClick(View v) { switch (v.getId()) { case R.id.button: AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity. this); dialog.setTitle("This is Dialog"); dialog.setMessage("Something important."); dialog.setCancelable(false); dialog.setPositiveButton("OK", new DialogInterface. OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this,"You clicked OK",Toast.LENGTH_SHORT).show(); } }); dialog.setNegativeButton("Cancel", new DialogInterface. OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this,"You clicked Cancel",Toast.LENGTH_SHORT).show(); } }); dialog.show(); break; default: break; } }
程式碼的分析:如上點擊警告欄只是在做了列印出相關Toast提示。
- 首先通過AlertDialog.Builder創建一個AlertDialog的實例
- 然後可以為這個對話框設置標題、內容、可否用Back鍵關閉對話框等屬性
- 接下來調用setPositiveButton() 方法為對話框設置確定按鈕的點擊事件(對應於確定OK按鍵)
- 調用setNegativeButton() 方法設置取消按鈕的點擊事件(對應於Cancel按鍵)
- 最後調用show() 方法將對話框顯示出來。重新運行程式
1.7 ProgressDialog
ProgressDialog和AlertDialog有點類似,都可以在介面上彈出一個對話框,都能夠屏蔽掉其他控制項的交互能力。不同的是,ProgressDialog會在對話框中顯示一個進度條,一般用於表示當前操作比較耗時,讓用戶耐心地等待。它的用法和AlertDialog也比較相似,修改MainActivity中的程式碼,如下所示:
@Override public void onClick(View v) { switch (v.getId()) { case R.id.button: ProgressDialog progressDialog = new ProgressDialog (MainActivity.this); progressDialog.setTitle("This is ProgressDialog"); progressDialog.setMessage("Loading..."); progressDialog.setCancelable(true); progressDialog.show(); break; default: break; } }
可以看到,這裡也是先構建出一個ProgressDialog 對象,然後同樣可以設置標題、內容、可否取消等屬性,最後也是通過調用show()
方法將ProgressDialog顯示出來。重新運行程式,點擊按鈕後,效果如下圖所示。

注意,如果在setCancelable() 中傳入了false ,表示ProgressDialog是不能通過Back鍵取消掉的,這時你就一定要在程式碼中做好控制,當數據載入完成後必須要調用ProgressDialog的dismiss() 方法來關閉對話框,否則ProgressDialog將會一直存在。
好了,關於Android常用控制項的使用,我要講的就只有這麼多。一節內容就想覆蓋Android控制項所有的相關知識不太現實,同樣一口氣就想學會所有Android控制項的使用方法也不太現實。本節所講的內容對於你來說只是起到了一個引導的作用,你還需要在以後的學習和工作中不斷地摸索,通過查閱文檔以及網上搜索的方式學習更多控制項的更多用法。當然,當本書後面涉及一些我們前面沒學過的控制項和相關用法時,我仍然會在相應的章節做詳細的講解。