Android – Hộp thoại


Được đăng vào ngày 24/05/2016 | 0 bình luận
Đánh giá bài viết

Hộp thoại (thuật ngữ là Dialog) trong Window là một cửa sổ hiện ra khi cần thông báo cho người dùng, ngoài ra hộp thoại còn có thể nhận dữ liệu, thao tác với dữ liệu đó… hộp thoại trong Android cũng không khác mấy. Trong Android chúng ta dùng lớp AlertDialog để hiển thị hộp thoại, tuy nhiên chúng ta không tạo đối tượng AlertDialog trực tiếp từ lớp này mà dùng một lớp kế thừa từ lớp này là Builder.

Hiển thị thông báo

Chúng ta sẽ sử dụng lớp AlertDialog để hiển thị hộp thoại thông báo.

Ví dụ:

<?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" >
    
    <Button 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dip" 
        android:onClick="onClicked" 
        android:text="Show" />
        
</LinearLayout>

Trong file main.xml, chúng ta thiết kế một Button, khi click Button này thì hiển thị hộp thoại, phương thức xử lý sự kiện click là onClicked().

package com.phocode;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.app.AlertDialog;
import android.content.DialogInterface;

public class MainActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
 
    public void onClicked(View view)
    { 
        AlertDialog ad = new AlertDialog.Builder(this).create();
 
        ad.setTitle("Dialog Example");
        String msg = String.format("Hello World");
        ad.setMessage(msg);
        ad.setIcon(android.R.drawable.ic_dialog_info);
 
        ad.setButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which)
            {
                 dialog.cancel();
            }
        });
 
        ad.show();
    } 
}

Chúng ta dùng lớp AlertDialog để hiển thị một hộp thoại thông báo đơn giản.

AlertDialog ad = new AlertDialog.Builder(this).create();

Chúng ta tạo đối tượng AlertDialog từ lớp con của nó là Builder.

ad.setTitle("Dialog Example");
String msg = "Hello World";
ad.setMessage(msg);
ad.setIcon(android.R.drawable.ic_dialog_info);

Tiếp theo chúng ta thiết lập tiêu đề cho hộp thoại bằng phương thức setTitle(), thiết lập đoạn text thông báo bằng phương thức setMessage(), thiết lập icon cho hộp thoại bằng phương thức setIcon().

ad.setButton("OK", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
        dialog.cancel();
    }
});

Mặc định hộp thoại được tạo ra sẽ không có nút nào để bấm cả, muốn thêm nút bấm thì chúng ta gọi phương thức setButton() với tham số đầu tiên là tên nút, tham số thứ 2 là đối tượng giao diện DialogInterface, giao diện này có lớp OnClickListener với phương thức onClick() dùng để lắng nghe sự kiện click Button, ở đây chúng ta chỉ làm công việc là hủy hộp thoại bằng phương thức cancel().

ad.show();

Khi nào cần hiển thị hộp thoại thì chúng ta gọi phương thức show().

Screenshot_2016-05-24-08-56-48

Nhận dữ liệu từ hộp thoại

Chúng ta cũng có thể dùng hộp thoại để nhận dữ liệu từ người dùng.

Ví dụ:

<?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" >
    
    <Button 
        android:id="@+id/btnId" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dip"
        android:onClick="onClicked" 
        android:text="Show" />   
        
    <TextView 
        android:id="@+id/tvId" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" />
        
</LinearLayout>

Trong file main.xml chúng ta thiết kế một Button và một TextView, click vào Button sẽ hiển thị hộp thoại có EditText để người dùng nhập văn bản vào, TextView sẽ hiển thị đoạn văn bản mà người dùng nhập vào.

package com.phocode;
import android.app.Activity;
import android.os.Bundle;
import android.app.AlertDialog;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.content.DialogInterface;

public class MainActivity extends Activity
{
    private TextView tv;
 
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        tv = (TextView) findViewById(R.id.tvId);
    }

    public void onClicked(View view)
    {
        AlertDialog.Builder ad = new AlertDialog.Builder(this);

        ad.setTitle("Dialog Example");
        ad.setMessage("Enter your name");

        final EditText input = new EditText(this);
        ad.setView(input);

        ad.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dlg, int which) {
            String val = input.getText().toString();
            String msg = String.format("Hello %s!", val);
            tv.setText(msg);
          }
        });

        ad.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dlg, int which) {
            dlg.cancel();
          }
        });

        ad.show();
    }
}

Click vào Button sẽ hiển thị hộp thoại có ô EditText để người dùng nhập văn bản.

final EditText input = new EditText(this);
ad.setView(input);

Chúng ta khai báo EditText để hiển thị trên hộp thoại, chúng ta sẽ cần tham chiếu đến đối tượng này trong lớp nội nên phải khai báo final. Để hiển thị một View lên hộp thoại thì chúng ta dùng phương thức setView().

ad.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dlg, int which) {
    String val = input.getText().toString();
    String msg = String.format("Hello %s!", val);
    tv.setText(msg);
    }
});

ad.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dlg, int which) {
    dlg.cancel();
    }
});

Hộp thoại trong Android chỉ hiển thị được 1 hoặc 2 hoặc 3 Button chứ không hiển thị được nhiều hơn. Mặc định phương thức setButton() của lớp AlertDialog chỉ thiết lập 1 Button duy nhất, muốn hiển thị 2 hoặc 3 Button thì chúng ta phải truyền vào hằng số AlertDialog.BUTTON_POSITIVE, AlertDialog.BUTTON_NEGATIVE hoặc AlertDialog.BUTTON_NEUTRAL, 3 hằng số này thực ra cũng không mang nhiều ý nghĩa lắm, chúng tượng trưng cho các nút Yes, No, Cancel hay đại loại thế. Tuy nhiên ở đây chúng ta không dùng lớp AlertDialog mà dùng lớp Builder. Mặc định lớp này không có phương thức setButton() mà có 2 phương thức setPositiveButton()setNegativeButton() để thiết lập các Button. Tham số của 2 phương thức này cũng giống như với phương thức setButton(). Ở đây chúng ta sẽ lấy chuỗi trong EditText và gán vào TextView khi click nút Ok, hoặc hủy hộp thoại nếu click nút Cancel.

Screenshot_2016-05-24-09-16-28







Trả lời


Lưu ý: bọc code trong cặp thẻ [code language="x"][/code] để highlight code.


Ví dụ:


[code language="cpp"]


    std::cout << "Hello world";


[/code]



Các ngôn ngữ được hỗ trợ gồm: actionscript3, bash, clojure, coldfusion, cpp, csharp, css, delphi, diff, erlang, fsharp, go, groovy, html, java, javafx, javascript, latex, matlab, objc, perl, php, powershell, python, r, ruby, scala, sql, text, vb, xml.

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *