新建一個(gè)項(xiàng)目UIWidgetTest整袁,簡(jiǎn)單起見坐昙,這里我們?cè)试SAndroid Studio自動(dòng)創(chuàng)建活動(dòng),活動(dòng)名和布局都使用默認(rèn)值
TextView
TextView可以說是最簡(jiǎn)單的一種控件了疾棵,下面來說TextView的更多用法痹仙,修改activity_main.xml中的代碼开仰,代碼如下所示
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="This is TextView!"
android:gravity="center"
android:textSize="24sp"
android:textColor="#00ff00"/>
</LinearLayout>
android:layout_width 和 android:layout_height指定控件的寬度和高度,所有的控件都有這兩個(gè)屬性恩溅。
match_parent表示控件的大小和父布局的大小一樣脚乡,即控件的大小由父布局來決定滨达。
wrap_content表示控件的大小剛好能夠包含里面的內(nèi)容就可以了,即內(nèi)容決定控件的大小
android:text 指定TextView顯示的文本內(nèi)容窒典。
android:gravity 指定文字的對(duì)齊方式,可選值為top,bottom,left,right涩搓,center等,可以通過“|”來指定多個(gè)值良拼,TextView中的文字默認(rèn)左上角對(duì)齊庸推,我們這里指定為center,相當(dāng)于center_vertical|center_horizontal聋亡,即水平和垂直都居中對(duì)齊
android:textSize 和 android:textColor分別用來指定文字的大小和顏色坡倔,字體大小使用sp作為單位
運(yùn)行程序脖含,效果如下所示
當(dāng)然TextView中還有很多屬性养葵,這里不一一介紹,用的時(shí)候再去查看文檔
Button
Button是程序用于和用戶進(jìn)行交互的一個(gè)重要控件请契,它可配置的屬性和TextView差不多夏醉,我們?cè)?strong>activity_main.xml中加入Button
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="false"
android:text="Button"
/>
由于系統(tǒng)會(huì)對(duì)Button中的所有英文字母進(jìn)行大寫轉(zhuǎn)換畔柔,可以用android:textAllCaps="false"來禁用這一特性。重新運(yùn)行程序腮考,效果如下所示
接下來我們?cè)?strong>MainActivity對(duì)Button的點(diǎn)擊事件注冊(cè)一個(gè)監(jiān)聽器
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 view) {
//在此添加邏輯
}
});
}
}
如果不喜歡用匿名類的方式注冊(cè)監(jiān)聽器踩蔚,可以使用實(shí)現(xiàn)接口的方式來注冊(cè)監(jiān)聽器枚粘,代碼如下所示
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 view) {
switch (view.getId()) {
case R.id.button:
// 業(yè)務(wù)邏輯
break;
default:
break;
}
}
}
EditText
EditText是程序和用戶交互的另一個(gè)控件,它允許用戶在控件里輸入和編輯局骤,并可以在程序中對(duì)這些內(nèi)容進(jìn)行處理暴凑。
我們?cè)?strong>activity_main.xml添加EditText控件现喳,代碼如下所示
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLength="2"
android:hint="Type is here!"
/>
android:hint用于在輸入框中顯示一些提示性的文字
android:maxLength指定EditText最大行數(shù),這里為兩行泣洞,當(dāng)輸入的內(nèi)容超過兩行時(shí)球凰,文本會(huì)繼續(xù)向上滾動(dòng)腿宰,而EditText則不會(huì)繼續(xù)拉伸
我們還可以結(jié)合使用EditText和Button來完成一些功能吃度,比如通過點(diǎn)擊來Button來獲取EditText中的輸入的內(nèi)容,修改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 view) {
switch (view.getId()) {
case R.id.button:
String text = editText.getText().toString();
Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
}
重新運(yùn)行程序伊者,效果如下所示
ImageView
ImageView用于在界面上展示圖片的控件
我們?cè)趓es/drawable目錄下添加兩張圖片
在activity_main.xml添加ImageView控件
<ImageView
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/image_1"
/>
android:src指定一張圖片
我們可以通過程序代碼來動(dòng)態(tài)更新圖片,修改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 view) {
switch (view.getId()) {
case R.id.button:
imageView.setImageResource(R.drawable.image_2);
break;
default:
break;
}
}
}
通過ImageView的setImageResource()方法將顯示的圖片改成image_2.png,重新運(yùn)行程序可以看到效果
ProgressBar
ProgressBar用于在程序中顯示一個(gè)進(jìn)度條搂蜓,表示程序正在加載
在activity_main.xml中添加代碼辽装,如下所示
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
重新運(yùn)行程序拾积,會(huì)看到屏幕中會(huì)有一個(gè)圓形進(jìn)度條正在旋轉(zhuǎn)
android:visibility可用來指定控件的可見屬性丰涉,所有的控件都有這個(gè)屬性,可選值有3個(gè):invisible玲销、visible 和 gone贤斜。
visible 表示控件可見,是默認(rèn)值猴抹。
invisible 表示控件不可見锁荔,但是它還占據(jù)著原來的位置和大小阳堕。
gone 表示不僅不可見,還不占用任何屏幕空間
我們還可以通過代碼來設(shè)置控件的可見性前普,使用的是 setVisibility() 方法壹堰,可選參數(shù)有3個(gè):View.VISIBLE贱纠、View.GONE 和 View.INVISIBLE
接下來我們來實(shí)現(xiàn)點(diǎn)擊一下按鈕讓進(jìn)度條消失,再點(diǎn)擊一下讓按鈕出現(xiàn)這種效果目木,修改MainActivity中的代碼懊渡,如下所示
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText editText;
private ImageView imageView;
private ProgressBar progressBar;
@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);
progressBar = (ProgressBar) findViewById(R.id.progress_bar);
button.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button:
imageView.setImageResource(R.drawable.image_2);
if (progressBar.getVisibility() == View.GONE) {
progressBar.setVisibility(View.VISIBLE);
} else {
progressBar.setVisibility(View.GONE);
}
break;
default:
break;
}
}
}
通過getVisibility() 方法來判斷ProgressBar是否可見剃执,若可見則隱藏肾档,若不可見則顯示出來辫继,重新運(yùn)行程序俗慈,不斷點(diǎn)擊按鈕闺阱,你會(huì)看到進(jìn)度條會(huì)在顯示和隱藏間來回切換
我們還可以通過style屬性來設(shè)置ProgressBar不同的樣式酣溃,下面我們來設(shè)置成水平進(jìn)度條,修改activity_main.xml中的代碼扛或,如下所示
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
/>
android:max給進(jìn)度條設(shè)置一個(gè)最大值碘饼,然后代碼中動(dòng)態(tài)更改進(jìn)度條的進(jìn)度艾恼,修改MainActivity的代碼,如下所示
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button:
// 動(dòng)態(tài)更新進(jìn)度條進(jìn)度
int progress = progressBar.getProgress();
progress=progress+10;
progressBar.setProgress(progress);
break;
default:
break;
}
}
每點(diǎn)擊一次按鈕秆吵,就會(huì)先獲取當(dāng)前進(jìn)度條的進(jìn)度纳寂,然后在現(xiàn)有進(jìn)度和基礎(chǔ)上加10作為更新后的進(jìn)度泻拦。重新運(yùn)行程序,效果如下所示
AlertDialog
AlertDialog可以在當(dāng)前頁面彈出一個(gè)對(duì)話框,在所有界面元素之上架曹,可以屏蔽掉界面其他控件的交互能力绑雄,因此AlertDialog一般用于提示一些非常重要的內(nèi)容或者警告信息。
下面我們來學(xué)習(xí)一下它的用法罗珍,修改MainActivity中的代碼,如下所示
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button:
// AlertDialog的學(xué)習(xí)
AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("This is Title");
dialog.setMessage("This is Message");
// 可否用Back鍵關(guān)閉對(duì)話框
dialog.setCancelable(false);
// 設(shè)置確定按鈕的點(diǎn)擊事件
dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
// 設(shè)置取消按鈕的點(diǎn)擊事件
dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
// 將對(duì)話框顯示出來
dialog.show();
break;
default:
break;
}
}
首先通過AlertDialog.Builder 創(chuàng)建一個(gè) AlertDialog 實(shí)例,然后為這個(gè)對(duì)話框設(shè)置標(biāo)題扣唱、內(nèi)容画舌、可否用Back鍵關(guān)閉對(duì)話框等屬性已慢,再調(diào)用setPositiveButton() 方法設(shè)置對(duì)話框確認(rèn)按鈕的點(diǎn)擊事件佑惠,調(diào)用setNegativeButton() 方法設(shè)置對(duì)話框取消按按鈕的點(diǎn)擊事件,最后調(diào)用show() 方法將對(duì)話框顯示出來
ProgressDialog
ProgressDialog 跟AlertDialog很類似旭咽,不同的是ProgressDialog對(duì)話框中會(huì)有一個(gè)進(jìn)度條穷绵,表示當(dāng)前操作比較耗時(shí)特愿,讓用戶耐心等待
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button:
// ProgressDialog的學(xué)習(xí)
ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("This is ProgressDialog");
progressDialog.setMessage("This is Message");
progressDialog.setCancelable(true);
progressDialog.show();
break;
default:
break;
}
}
內(nèi)容參考自《第一行代碼》