Monday, September 11, 2017

Bài 3 – Spinner

Nháy chuột phải vào com.bai.baidau, New > Class, đặt tên là third, finish.
Lại nháy chuột phải vào folder layout, New > Android XML File, ở cửa sổ bật ra đặt tên là ac3, finish. 
Sửa đi để class third trông như sau
public class third extends Activity {
           
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.ac3);

}
}
Bây giờ copy toàn bộ đoạn sau vào file ac3.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="5dp"
        android:text="Năm âm lịch là:"
        android:textColor="#800000"
        android:textSize="20sp" />

    <TextView

        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="5dp"
        android:textColor="#000080"
        android:textSize="20sp" />

    <TextView

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="5dp"
        android:text="Chọn năm dương:"
        android:textColor="#800000"
        android:textSize="20sp" />

    <Spinner

        android:id="@+id/spin1"
        android:layout_width="72dp"
        android:layout_height="45dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="15dp"
        android:background="#a1caf1"
        android:lineSpacingExtra="4dp"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <LinearLayout

        android:layout_width="wrap_content"
        android:layout_height="41dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="15dp" >

        <Button

            android:id="@+id/bu1"
            android:layout_width="65dp"
            android:layout_height="40dp"
            android:layout_marginLeft="4dp"
            android:text="Quit"
            android:textColor="#0000cd"
            android:textSize="14sp" />
    </LinearLayout>

</LinearLayout>
Tiếp theo nháy đúp vào file AndroidManifest.xml để khai báo class mới, đúng tên gói.

Bây giờ vào class third để code.
Đầu tiên khai báo textView, Spinner, Button, tham chiếu địa chỉ.
Spinner là một thứ mà khi ta ấn vào nó sổ ra một danh sách để ta lựa chọn, trong nhiều trường hợp tiện hơn EditText vì không phải gõ, cứ chọn ngay.
Ta phải có một mảng dữ liệu có sẵn để cho vào danh sách chọn. Ở đây ta vẫn làm đổi năm dương ra âm, chỉ có khác là có sẵn các năm dương.
Ta có mảng sau:
String[] data = { "2010", "2011", "2012", "2013", "2014",
                  "2015", "2016", "2017", "2018", "2019", "2020"};     
Với Spinner, ta phải khai báo adapter,bạn copy dòng này vào.
private ArrayAdapter<String> adapter;
Nhớ import thư viện khi thấy dấu đỏ.
Trông class sẽ như sau

Copy đoạn sau xuống tiếp nối chỗ tham chiếu địa chỉ
adapter = new ArrayAdapter<String>(third.this, android.R.layout.simple_spinner_item,data);
 sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
           @Override
public void onItemSelected(AdapterView<?> parent, View view,
                              int position, long id) {
           String namduong = sp.getSelectedItem().toString();                    
            } 
            @Override
          public void onNothingSelected(AdapterView<?> arg0) {
                        // TODO Auto-generated method stub
            }
       });
            sp.setAdapter(adapter);
Đây là ta gắn cái adapter vào spinner để nó có danh sách sổ ra, bây giờ class trông như sau.

Quay lại MainActivity sửa chỗ nút Next b2 thành
Intent in = new Intent(MainActivity.this,third.class);       
startActivity(in);
Tức là ta chuyển sang màn hình của class third. Chạy thử, nhấn next, nhấn vào Spinner để nó sổ ra.

Cho đoạn code tính can vào phương thức Chi thành phương thức canchi, copy nó vào trên cái ngoặc đóng cuối cùng của class third.
public String canchi(int nam) {
            int soducan = nam % 10;
            String Can = "";
            if (soducan == 1) {
                  Can = "Tân";
            } else if (soducan == 2) {
                  Can = "Nhâm";
            } else if (soducan == 3) {
                  Can = "Quý";
            } else if (soducan == 4) {
                  Can = "Giáp";
            } else if (soducan == 5) {
                  Can = "Ất";
            } else if (soducan == 6) {
                  Can = "Bính";
            } else if (soducan == 7) {
                  Can = "Đinh";
            } else if (soducan == 8) {
                  Can = "Mậu";
            } else if (soducan == 9) {
                  Can = "Kỷ";
            } else {
                  Can = "Canh";
            }
            int soduchi = nam % 12;
            String Chi = "";
            if (soduchi == 1) {
                  Chi = "Dậu";
            } else if (soduchi == 2) {
                  Chi = "Tuất";
            } else if (soduchi == 3) {
                  Chi = "Hợi";
            } else if (soduchi == 4) {
                  Chi = "Tý";
            } else if (soduchi == 5) {
                  Chi = "Sửu";
            } else if (soduchi == 6) {
                  Chi = "Dần";
            } else if (soduchi == 7) {
                  Chi = "Mão";
            } else if (soduchi == 8) {
                  Chi = "Thìn";
            } else if (soduchi == 9) {
                  Chi = "Tỵ";
            } else if (soduchi == 10) {
                  Chi = "Ngọ";
            } else if (soduchi == 11) {
                  Chi = "Mùi";
            } else {
                  Chi = "Thân";
            }
            return Can+ " "+Chi;
      }
Bây giờ là giải thích code trong cái Spinner.
String nam = sp.getSelectedItem().toString();
Ta dùng dòng này để lấy giá trị của lựa chọn, biến nó thành chuỗi.
int namduong = Integer.parseInt(nam);
Tiếp theo ta chuyển kiểu chuỗi sang số, vì mảng chúng ta nhập vào vốn là số ở dạng chữ nên chuyển kiểu sẽ không bị lỗi, vì thế không cần try catch như đối với EditText.
String namam = canchi(namduong);
tv.setText(namam);
Cuối cùng ta gọi phương thức canchi, truyền vào số năm dương và set kết quả ra TextView.
Nếu bạn làm đúng, màn hình sẽ như sau.

Chọn Spinner để thấy kết quả năm âm chạy theo.

Bây giờ ta muốn vừa vào màn hình Spinner phải hiện ngay năm 2017. Ta thêm dòng sau vào dưới chỗ setAdapter.
sp.setSelection(7);
Vì năm 2017 là phần tử thứ 8 nên để hiển thị nó, ta dùng i=7, vì i=0 là phần tử đầu tiên. Chỗ này mới học cũng hay bị nhầm.
Cuối cùng ta code nút quit với lệnh finish() là xong.


Bây giờ thử sửa chữ “2018” trong data thành”2018  “ có thêm dấu cách trắng, chạy chương trình ra điện thoại để thấy khi chọn năm 2018 nó bị crash, sập không chạy, vì ký tự trắng đó mà khi chuyển kiểu bị lỗi.
Để tránh điều này ta dùng lệnh trim() để bỏ hết ký tự trắng ở hai bên nếu có, thêm dòng sau vào code.
nam=nam.trim();
Chạy lại không còn lỗi nữa.
Bạn có thể tự thêm các năm vào trong mảng data cho nó dài ra, thay đổi màu chữ, kích cỡ trong file ac3.xml để quen với các chỉ số của nó.

Dòng android:textColor="#0000cd" để tô màu chữ, bạn search mã Hex code color thay vào là ra màu khác.

No comments:

Post a Comment