1. Toast trong Android Studio
Toast là một loại thông báo (message) ngắn. Để hiển thị trong một khoảng thời gian nhất định và tự động mất dần.
Nó giúp người lập trình gỡ rối (debugging) cho chương trình khi cần thiết . Trong lúc hiển thị, không ảnh hưởng đến activity khác và không bắt các sự kiện của người dùng.
a. Tạo Giao diện trong tập tin XML
Mở tập tin res/layout/activity_main.xml
và thêm đoạn mã sau:
-
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:id="@+id/LinearLayout1" Android:layout_width="fill_parent" Android:layout_height="fill_parent" Android:orientation="vertical" Android:layout_gravity="center" Android:gravity="center"> <Button Android:id="@+id/button1" Android:layout_width="wrap_content" Android:layout_height="wrap_content" Android:text="Toast " Android:gravity="center" /> </LinearLayout>
- b. Viết code cho chương trình
Thêm sự kiện OnClickListener()
cho Button . Khi người dùng click vào Button một thông báo xuất hiện.
Mở tập tin MainActivity.java và thêm đoạn mã sau:
Code:
public class MainActivity extends Activity { Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { Toast.makeText(getApplicationContext(), "Bạn vừa Click vào button Toast!!!", Toast.LENGTH_LONG).show(); } }); } }
Ví dụ: Dùng tablelayout tạo các button số từ 1 đến 9 khi click vào button sẽ hiện lên thông báo các số vừa chọn.
Mở tập tin res/layout/activity_main.xml
và ta làm như sau:
Code trong Mainactivity.java
publicclass MainActivity extends Activity implements OnClickListener { Button so1,so2,so3,so4,so5,so6,so7,so8,so9; @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); so1=(Button) findViewById(R.id.btn1); so2=(Button) findViewById(R.id.btn2); so3=(Button) findViewById(R.id.btn3); so4=(Button) findViewById(R.id.btn4); so5=(Button) findViewById(R.id.btn5); so6=(Button) findViewById(R.id.btn6); so7=(Button) findViewById(R.id.btn7); so8=(Button) findViewById(R.id.btn8); so9=(Button) findViewById(R.id.btn9); so1.setOnClickListener(this); so2.setOnClickListener(this); so3.setOnClickListener(this); so4.setOnClickListener(this); so5.setOnClickListener(this); so6.setOnClickListener(this); so7.setOnClickListener(this); so8.setOnClickListener(this); so9.setOnClickListener(this); } void toast(String i) { Toast.makeText(getApplicationContext(), "ban vua click so "+i+" ", Toast.LENGTH_LONG).show(); } @Override publicvoid onClick(View arg0) { // TODO Auto-generated method stub switch (arg0.getId()){ case R.id.btn1: toast("1"); break; case R.id.btn2: toast("2"); break; case R.id.btn3: toast("3"); break; case R.id.btn4: toast("4"); break; case R.id.btn5: toast("5"); break; case R.id.btn6: toast("6"); break; case R.id.btn7: toast("7"); break; case R.id.btn8: toast("8"); break; case R.id.btn9: toast("9"); break; } } }
2. Dialog trong android studio
Một hộp thoại thường là một màn hình nhỏ mà xuất hiện đè lên các Activity hiện tại. Activity nằm dưới sẽ không tương tác được với người dùng mà thay vào đó là hộp thoại sẽ đóng vai trò đó. Hộp thoại thông thường dùng để thông báo hay đại loại vậy. Thông thường có các loại hộp thoại sau:
Tên dialog | Miêu tả |
---|---|
AlertDialog | Là dạng hộp thoại có nhiều nhất 3 nút nhấn hoặc có thêm danh sách các mục lựa chọn có thêm checkbox hay radio button. AlertDialog thích hợp làm hộp thoại trong các chương trình Android và được khuyến khích dùng. |
ProgressDialog | Là hộp thoại có vòng xoay hay thanh thể hiện tiến trình đang chạy. Bởi vì nó là dạng AlertDialog mở rộng cho nên nó cũng có nút nhấn. |
2.1 Tạo AlertDialog
Giao diện hiển thị của nó gồm nhiều thành phần như sau:
- Tiêu đề.
- Thông điệp thông báo.
- Danh sách chứa các CheckBox hay Radio Button.
File activity_main.xml:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:id="@+id/LinearLayout1" Android:layout_width="fill_parent" Android:layout_height="fill_parent" Android:orientation="vertical" Android:layout_gravity="center" Android:gravity="center"> <Button Android:id="@+id/button1" Android:layout_width="wrap_content" Android:layout_height="wrap_content" Android:text="Dialog " Android:gravity="center" /> </LinearLayout>
File MainActivity.java:
public class MainActivity extends Activity { final Context context = this; Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context ); // gán tiêu đề cho dialog alertDialogBuilder.setTitle("Thoát"); // hiển thị Thông điệp (thông báo) lên dialog alertDialogBuilder .setMessage("Bạn có muốn thoát không ?") .setCancelable(false) .setPositiveButton("Có",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int id) { MainActivity.this.finish(); } }) .setNegativeButton("Không",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int id) { dialog.cancel(); } }); // Tạo alert dialog AlertDialog alertDialog = alertDialogBuilder.create(); // Hiển thị dialog alertDialog.show(); } }); }
Để khởi tạo AlertDialog, ta phải sử dụng lớp con là AlertDialog.Builder:
AlertDialog.Builder build = new AlertDialog.Builder(context);
Sau khi build xong, thì gọi create để tạo object của AlertDialog từ builder đó:
AlertDialog ad = build.create();
Mục đích | Phương thức/Đối tượng |
---|---|
Tạo đối tượng để xây dựng AlertDialog | AlertDialog.Builder builder = new AlertDialog.Builder(this); |
Thiết lập tiêu đề | setTitle(CharSequence title) hoặc setTitle(int titleId) |
Thiết lập thông điệp |
setMessage(CharSequence message) hoặc setMessage(int messageId) |
Thiết lập icon | setIcon(Drawable icon) hoặc setIcon(int iconId) |
Thiết lập danh sách |
setItems(CharSequence[] items, DialogInterface.OnClickListener listener) hoặc setItem(int itemsId, DialogInterface.OnClickListener listener) |
Thiết lập danh sách chứa Radio Buttons |
setSingleChoiceItems(CharSequence[] items, int checkedItem, DialogInterface.OnClickListener listener) hoặc setSingleChoiceItems(int itemsId, int checkedItem,DialogInterface.OnClickListener listener) |
Thiết lập danh sách chứa CheckBox |
setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, DialogInterface.OnClickListener listener) hoặc setMultiChoiceItems(int itemsId, boolean checkedItems,DialogInterface.OnClickListener listener) |
Thiết lập Positive Button |
setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener) hoặc setPositiveButton(int textId, DialogInterface.OnClickListenerlistener) |
Thiết lập Negative Button |
setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener) hoặc setNegativeButton (int textId,DialogInterface.OnClickListener listener) |
Thiết lập Neutral Button |
setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener) hoặc setNeutralButton (int textId, DialogInterface.OnClickListenerlistener) |
2.2 Progress Dialog
ProgressDialog là loại Dialog dùng để hiển thị tiến độ thực hiện một công việc nào đó. Dạng Dialog này được tạo ra từ lớp cha là AlertDialog. Ngoài những tính chất riêng, nó cũng kế thừa nhiều thuộc tính từ lớp cha AlertDialog như : Tiêu đề, Thông điệp, Buttons.
- Dạng xoay:
Code :
public class MainActivity extends Activity { final Context context = this; Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button1); // add button listener button.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { ProgressDialog pd = new ProgressDialog(MainActivity.this); pd.setTitle("Vui Lòng chờ......"); pd.setMessage("loading "); pd.show(); } }); } }
-Dạng thanh ngang
Code :
public class MainActivity extends Activity { final Context context = this; Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button1); // add button listener button.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { final ProgressDialog progressDialog1; progressDialog1 = new ProgressDialog(this); progressDialog1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog1.setMessage("Loading..."); progressDialog1.setCancelable(true); progressDialog1.setProgress(0); //Set tiến độ cho ProgressBar progressDialog1.setMax(100);//Set Giá trị cho tối đa cho ProgressBar progressDialog1.show(); //Tạo Thread để tăng giá trị của Progress Bar theo thời gian chúng ta quy định new Thread(new Runnable() { @Override public void run() { while(progressDialog1.getProgress()<= ProgressDialog1.getMax()) { try { progressDialog1.incrementProgressBy(1);//Tăng Giá trị tiến độ Thread.sleep(100); if(progressDialog1.getProgress()== progressDialog1.getMax())// Nếu đạt tối đa progressDialog1.cancel(); } catch(Exception ex) {} } } }).start(); } }); } }
2.3 Custom Dialog
Là dạng Dialog có giao diện theo thiết kế của người lậptrình,có thể bao gồm cả ImageView, TextView, EditText, v.v…
Ví dụ về các loại dialog:
Ngoài layout main ra ta tạo thêm 1 layout khác có tên là customdialog:
Customdialog.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" > <ImageView android:id="@+id/imgAndroid" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="10dp" /> <TextView android:id="@+id/txtContent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFFF00" android:textSize="18sp" /> </LinearLayout>
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="Các loại Dialog" android:textSize="20sp" android:textColor="#ff0b0cff" android:textStyle="bold" /> <TableLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:stretchColumns="*" > <TableRow> <Button android:id="@+id/btnButtonDialog" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Button Dialog" /> <Button android:id="@+id/btnListDialog" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="List Dialog" /> </TableRow> <TableRow> <Button android:id="@+id/btnRadioDialog" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Radio Dialog" /> <Button android:id="@+id/btnCheckboxDialog" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="CheckBox Dialog" /> </TableRow> <TableRow> <Button android:id="@+id/btnProgressDialog" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Progress Dialog" /> <Button android:id="@+id/btnProgressBar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Progress Bar" /> </TableRow> <TableRow> <Button android:id="@+id/btnCustomDialog" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Custom Dialog" /> </TableRow> <TextView android:id="@+id/txtDisplay" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#ffff162a" android:textSize="20sp" android:text="Click vào Button" /> </TableLayout> </LinearLayout>
Code trong MainActivity.java
public class MainActivity extends Activity implements View.OnClickListener { Button buttonDialog,listDialog,radioDialog,checkboxDialog,progressDialog,progressBar,customDialog; TextView txtDisplay; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); buttonDialog = (Button) findViewById(R.id.btnButtonDialog); listDialog = (Button) findViewById(R.id.btnListDialog); radioDialog = (Button) findViewById(R.id.btnRadioDialog); checkboxDialog = (Button) findViewById(R.id.btnCheckboxDialog); progressDialog = (Button) findViewById(R.id.btnProgressDialog); progressBar = (Button) findViewById(R.id.btnProgressBar); customDialog = (Button) findViewById(R.id.btnCustomDialog); txtDisplay = (TextView) findViewById(R.id.txtDisplay); //Set Click buttonDialog.setOnClickListener(this); listDialog.setOnClickListener(this); radioDialog.setOnClickListener(this); checkboxDialog.setOnClickListener(this); progressDialog.setOnClickListener(this); progressBar.setOnClickListener(this); customDialog.setOnClickListener(this); } //mảng chuỗi sắp xếp tuần tự final CharSequence[] items = {"Android", "Java ", "PHP"}; //Mảng chứa trạng thái các item final boolean[] states = {false, false, true}; Handler handler = new Handler(); @Override public void onClick(View v) { switch(v.getId()) { case R.id.btnButtonDialog: txtDisplay.setText(""); //Bạn có thể lược bỏ phần nào trong Dialog mà bạn thích: Tile, Message... AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Thoát");// Set tiêu đề builder.setMessage("Bạn có muốn thoát không ?");//Set nội dung cho Dialog builder.setCancelable(false);//Set có cho người dùng Cancer bằng nút quay lại (back) ko? false: ko builder.setPositiveButton("Có",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //Làm cái gì đó khi ấn Yes tại đây txtDisplay.setText("YES"); dialog.dismiss(); } }); builder.setNegativeButton("Không", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // txtDisplay.setText("NO"); dialog.cancel(); } }); builder.show();//Hiển thị Dialog break; case R.id.btnListDialog: txtDisplay.setText(""); AlertDialog.Builder builder1 = new AlertDialog.Builder(this); builder1.setTitle("Danh sách ngôn ngữ lập trình"); builder1.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();//Hiển thị item được lựa chọn txtDisplay.setText(items[item].toString()); } }); builder1.show(); break; case R.id.btnRadioDialog: txtDisplay.setText(""); AlertDialog.Builder builder2 = new AlertDialog.Builder(this); builder2.setTitle("Danh sách ngôn ngữ lập trình"); //setSingleChoiceItems(CharSequence[] items, int checkedItem, OnClickListener listener): // -> checkedItem: Item muốn check mặc định, để giá trị -1 để ko chọn giá trị nào, vị trí bắt đầu từ 0 builder2.setSingleChoiceItems(items,-1, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();//Hiển thị item được lựa chọn txtDisplay.setText(items[item].toString()); dialog.dismiss(); } }); builder2.show(); break; case R.id.btnCheckboxDialog: txtDisplay.setText(""); AlertDialog.Builder builder3 = new AlertDialog.Builder(this); builder3.setTitle("Danh sách ngôn ngữ lập trình"); builder3.setMultiChoiceItems(items, states, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int item, boolean isChecked) { Toast.makeText(getApplicationContext(), items[item] + " được gán là " + isChecked, Toast.LENGTH_SHORT).show(); } }); builder3.show(); break; case R.id.btnProgressDialog: //true: Có cho cancel Dialog //false: indeterminate (Vô hạn) ProgressDialog progressDialog = ProgressDialog.show(MainActivity.this, "progress Dialog", "Please waiting ...",false, true, new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { txtDisplay.setText("Done"); } }); progressDialog.show(); break; case R.id.btnProgressBar: final ProgressDialog progressDialog1; progressDialog1 = new ProgressDialog(this); progressDialog1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog1.setMessage("Loading..."); progressDialog1.setCancelable(true); progressDialog1.setProgress(0);//Set tiến độ cho ProgressBar progressDialog1.setMax(100);//Set Giá trị cho tối đa cho ProgressBar progressDialog1.show(); //Tạo Thread để tăng giá trị của Progress Bar theo thời gian chúng ta quy định new Thread(new Runnable() { @Override public void run() { while(progressDialog1.getProgress() <= progressDialog1.getMax()) { try { progressDialog1.incrementProgressBy(1);//Tăng Giá trị tiến độ Thread.sleep(100); if(progressDialog1.getProgress()== progressDialog1.getMax())// Nếu đạt tối đa progressDialog1.cancel(); } catch(Exception ex) {} } } }).start(); break; case R.id.btnCustomDialog: Dialog dialog = new Dialog(MainActivity.this); dialog.setContentView(R.layout.customdialog); //Hiện thị Dialog với layout custom_Dialog dialog.setTitle("Custom Dialog"); dialog.setCancelable(true); //Set Image ImageView imageView = (ImageView) dialog.findViewById(R.id.imgAndroid); imageView.setImageResource(R.drawable.ic_launcher); //Set Text for TextView TextView txtContent = (TextView) dialog.findViewById(R.id.txtContent); txtContent.setText("VD về Custom Dialog."); //Show Dialog dialog.show(); break; } } }