文章目錄
- TextView 控件:文本信息
- Button 控件:按鈕
- EditText 控件:輸入框
- ImageView 控件:圖片
- ProgressBar 控件:進度條
- AlertDialog 控件:提示框
- ProgressDialog 控件:帶有進度條的提示框
TextView 控件:文本信息
TextView
是 Android 中較常用的一個控件。主要用于在界面上顯示一段文本信息,配置在每個活動的 xml
文件中。除了之前用到的 android:id
、android:layout_width
、android:layout_height
三種屬性,下面三種屬性也比較常用:
- android:gravity :文字對齊方式,可選值有
top
、bottom
、left
、right
、center
等,可以用|
來同時指定多個值。 - android:textSize :文字大小,以
sp
為單位。 - android:textColor:文字顏色。
Button 控件:按鈕
此前我們可能經常困擾于 Button
上的英文字母總是全部大寫,這是由于默認配置會對所有英文字母自動進行大寫轉換,如果不想要我們可以使用這樣的配置:
<Button android:textAllcaps="false"/>
以往的博客里通常使用匿名類來注冊監聽器:
Button button = (Button) findViewById(R.id.button_1);
button.setOnClickListener(new View.OnClickListener() { // 匿名類 new View.OnClickListener()@Overridepublic void onClick(View v) {//添加邏輯}
});
如果不想用匿名類來注冊,也可以用實現接口的方式來注冊:
// implements 繼承 View.OnClickListener 接口
public class MainActivity extends AppCompatActivity implements View.OnClickListener{@Overrideprotected void onCreate(Bundle savedInstanceState) {//...Button button = (Button) findViewById(R.id.button_1);button.setOnClickListener(this);// this 即 implements View.OnClickListener 的具體實現}@Overridepublic void onClick(View v){switch (v.getId()){case R.id.button_1://添加邏輯break;default:break;}}
}
EditText 控件:輸入框
EditText
允許用戶在控件里輸入和編輯內容,并且可以在程序中對這些內容進行處理:
<EditTextandroid:id="@+id/edit_text"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="Type Something Here"android:maxLines="2" />
運行結果:
- android:hint :在文本框中出現的提示文字。一旦用戶輸入,提示就會消失。
- android:maxLines :限制文本框的最大行數。當輸入內容增多時,
EditText
會不斷拉長,界面就會非常難看。本例中,輸入超過兩行,文本就會向上滾動,EditText
就不會再繼續拉伸。
還可以結合 EditText
和 Button
來完成一些功能,比如點擊按鈕來獲取 EditText
中輸入的內容:
public class MainActivity extends AppCompatActivity {private Button button;private EditText editText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.button_1);editText = (EditText) findViewById(R.id.edit_text); button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String inputText = editText.getText().toString();Toast.makeText(FirstActivity.this, inputText, Toast.LENGTH_SHORT).show();}});}
}
- 首先通過
findViewById()
方法得到 EditText 的實例; - 然后在 Button 的點擊事件里調用 EditText 的
getText()
方法獲取到輸人的內容; - 再調用
toString()
方法轉換成字符串; - 最后使用 Toast 將輸入的內容顯示出來。
運行結果:
ImageView 控件:圖片
ImageView 是用于在界面上顯示圖片的一個控件,使用這個控件需要在 drawable
目錄中預置一些圖片。
在 xml
文件中添加 ImageView:
<ImageViewandroid:id="@+id/image_view"android:layout_width="wrap_content"android:layout_height="wrap_content" android:src="@drawable/cmy1" >
</ImageView>
- 由于圖片的寬和高都是未知的,所以將 ImageView 的寬和高都設定為
wrap_content
,這樣就保證了不管圖片的尺寸是多少,圖片都可以完整地展示出來。 - android:src :指定引用哪張圖片,本例中是
drawable
系目錄下的名為cmy1
的圖片。
運行結果:
實現點擊 Button 切換圖片的功能:
public class FirstActivity extends AppCompatActivity {private ImageView imageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.first_layout);Button button_normal = (Button)findViewById(R.id.button_normal);imageView = (ImageView)findViewById(R.id.image_view);button_normal.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.button_normal:imageView.setImageResource(R.drawable.cmy2);break;default:break;}}});}
}
ProgressBar 控件:進度條
用于在界面上顯示一個進度條,表示程序正在加載一些數據:
<ProgressBarandroid:id="@+id/progress_circular"android:layout_width="match_parent"android:layout_height="wrap_content" ></ProgressBar>
有個問題,如上實現的進度條會一直旋轉:
可以通過可見屬性 visibility,來在加載完成時停止進度條旋轉:
visible
:表示可見,為默認值。invisible
:表示不可見,但依然存在,只是透明。gone
:表示不可見,并且不再占用屏幕空間。
可以通過 setVisiblity
方法來設定這三種值,舉個例子,通過點擊 Button 來切換 ProgressBar 為 GONE
還是 VISIBLE
:
public class FirstActivity extends AppCompatActivity {private ProgressBar progressBar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.first_layout);Button button_normal = (Button)findViewById(R.id.button_normal);progressBar = (ProgressBar)findViewById(R.id.progress_circular);button_normal.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.button_normal:if(progressBar.getVisibility() == View.GONE){ // 原本不可見則設為可見progressBar.setVisibility(View.VISIBLE);}else{ // 原本可見則設為不可見progressBar.setVisibility(View.GONE);}break;default:break;}}});}
}
默認的進度條形式是圓形,可以通過 style
屬性將進度條形式設為條形,并且給它設置一個最大值,從而達到動態改變進度條進度的目的:
<ProgressBarandroid:id="@+id/progress_bar"android:layout_width="match_parent"android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal"android:max="100"/>
實現 每點擊一次按鈕就能獲取進度條的當前進度,然后在現有進度條上加10作為更新后的進度 的功能:
public class FirstActivity extends AppCompatActivity {private ProgressBar progressBar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.first_layout);Button button_normal = (Button)findViewById(R.id.button_normal);progressBar = (ProgressBar)findViewById(R.id.progress_circular);button_normal.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.button_normal:int progress = progressBar.getProgress();progress = progress + 10;progressBar.setProgress(progress);break;default:break;}}});}
}
AlertDialog 控件:提示框
在當前界面彈出一個置頂于有界面元素之上的對話框,能夠屏蔽掉其他控件的交互能力。因此一般用于提示一些非常重要的內容或者警告信息。比如防誤刪等。
添加 AlertDialog:
public void onClick(View v) {AlertDialog.Builder dialog = new AlertDialog.Builder(FirstActivity.this);dialog.setTitle("Warning");dialog.setMessage("Are you sure?");dialog.setCancelable(false);// setCancelable 默認為 true,表點擊彈窗外或BACK鍵可以取消彈窗,false則表示不可以取消dialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 可以自定義點擊后的事件,比如跳轉到其他 ActivityIntent intent = new Intent(FirstActivity.this, DialogActivity.class);startActivity(intent);}});dialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});dialog.show();
}
setPositiveButton
、setNegativeButton
、setNeutralButton
三者都是封裝好的 Button,只是顯示位置不同,通常分別用來對應確定事件、否定事件、中立事件。但也可以按行為習慣進行更改,比如我偏要 setPositiveButton
對應否定事件別人也拿我沒辦法……只是對應事件和方法的意思不一樣可能在交接時誤導隊友……
ProgressDialog 控件:帶有進度條的提示框
可以在界面上彈出一個帶有進度條的提示框,能夠屏蔽掉其他空間的交互能力。一般是用于表示當前操作比較耗時,讓用戶耐心等待:
public void onClick(View v) {switch (v.getId()){case R.id.button_normal:ProgressDialog dialog = new ProgressDialog(FirstActivity.this);dialog.setTitle("ProgressDialog");dialog.setMessage("Loading……");dialog.setCancelable(false);dialog.setButton3("CANCEL", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) { }});dialog.setButton2("YES", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) { }});dialog.setButton("NO", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) { }});dialog.show();break;}
}
由于 setCancelable()
中傳入了 false
,因此 ProgressDialog 不能被取消,所以在加載完成之后一定要用 dismiss()
方法來關閉對話框,否則 ProgressDialog 會一直存在。