Monday, September 11, 2017

Bài 2 – New Activity, EditText, Toast

Nháy chuột phải vào com.bai.baidau, New> Class, đặt tên là second, 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à ac2, finish. 

Nếu màn hình bung ra trông như sau:

Thì nháy chuột vào chữ ac2 trong chỗ khoanh đỏ.
Copy đoạn code sau vào class second
public class second extends Activity {
              @Override
    protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.ac2);
 }
Chú ý bây giờ dòng setContenView là R.layout.ac2, tức là ta muốn gắn class vào giao diện layout nào thì dòng R.layout phải vào đúng layout đó.

Bây giờ copy toàn bộ đoạn sau vào file ac2.xml
<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:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="5dp"
        android:text="Nhập năm dương lịch:"
        android:textColor="#800000"
        android:textSize="20dp" />

    <EditText

        android:id="@+id/e"
        android:layout_width="82dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="5dp"
        android:background="#ccccff"
        android:gravity="center"
        android:hint="Dương lịch"
        android:lineSpacingExtra="4dp"
        android:singleLine="true"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="#00F"
        android:textSize="14sp" >
    </EditText>

    <TextView

        android:id="@+id/tv2"
        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="20dp" />

    <TextView

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

    <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="85dp"
            android:layout_height="40dp"
            android:text="Đổi năm"
            android:textColor="#0000cd"
            android:textSize="14sp" />

        <Button

            android:id="@+id/bu2"
            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 gần dưới cùng, copy đoạn code sau vào trên dòng </application> ở dưới cùng, lưu lại.
     <activity
       android:name="com.bai.baidau.second"            
       android:screenOrientation="portrait">
      </activity>      

Đó là ta đang khai báo class mới và đặt màn hình của class này là dọc, nếu không có dòng screenOrientation này, khi bạn quay ngang điện thoại, màn hình ứng dụng cũng quay ngang, nếu không cố tình để nó dùng được cả ngang dọc thì có thể bị vỡ giao diện, trông rất kinh khủng.
Chú ý nếu bạn không đặt tên package giống tôi thì trong file AndroidManifest.xml bạn khai báo phải đúng tên gói ứng dụng bạn đặt, nếu không ứng dụng sẽ crash, bị sập, ra màn hình đen thui khi bạn nhấn nút Next.
Tiếp theo quay lại class MainActivity copy dòng code sau cho cái nút Next.
b2.setOnClickListener(new View.OnClickListener() {
         @Override
    public void onClick(View v) {
   Intent in = new Intent(MainActivity.thissecond.class);           startActivity(in);
                  }
            });

Nhớ ấn Ctrl+Shift+O để import thư viện cần vào. Chạy thử, ấn nút Next để chuyển sang màn hình thứ 2, ta thấy nó như sau.

Bây giờ ta sẽ code vào class second để làm chương trình đổi lịch từ dương lịch thành năm âm lịch tương ứng.
Gõ các dòng khai báo TextView, Edittext, Button để class second trông như sau.

Hãy nhìn dòng tv = (TextView)findViewById(R.id.tv3); đó là ta tham chiếu địa chỉ cho cái TextView thứ 3 để sẽ ghi năm âm lịch ra đó, hai TextView còn lại không cần ghi gì nên để nguyên.
Dòng e.setRawInputType(Configuration.KEYBOARD_QWERTY); là để khi người dùng chạm tay vào ô EditText thì bàn phím hiện ra sẽ là phím số.
Thêm đoạn code cho cái nút Quit trước vì nó ngắn.
b2.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                              finish();
                        }
                  });
Khi ấn nút này, màn hình sẽ thoát, ta trở về màn hình trước, Android chỉ dùng có lệnh finish() là xong.
Nút 2 ta phải làm các việc sau:
- Kiểm tra xem người dùng đã nhập gì vào ô Edittext chưa, nếu chưa thì hiện thông báo nhắc.
- Kiểm tra xem có đúng là nhập vào số không, nếu không nhắc.
- Nếu đúng là số thì đổi nó ra Can Chi tương ứng.
Ở bài Java cơ bản ta đã biết cách tính can chi rồi, ở đây chỉ nêu cách làm 2 việc trước.
Ta lấy String nhập vào bằng lệnh String nam = e.getText().toString();
Ta kiểm tra xem nó có rỗng hay không bằng lệnh if (nam == null || nam.trim().equals(""))
Sau đó ta dùng lệnh chuyển kiểu sang số để tính toán, vì nếu người dùng nhập lẫn chữ việc chuyển kiểu sẽ bị lỗi, nên ta dùng try catch để đưa ra thông báo nhập sai, tức là đáp ứng được yêu cầu thứ 2. Nếu không có gì sai, ta đưa ra kết quả bình thường. Để thông báo ra màn hình ta dùng lệnh Toast.
Đoạn code tính Can như sau
int soducan=namduong%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";
}
Với Chi, ta cho nó thành phương thức để gọi dùng.
public String tinhchi(int nam){
            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 Chi;
      }
Phương thức này truyền vào một số nguyên và trả lại một String hay chữ Chi đã tính ra. Hãy copy phương thức này vào ngay trên dấu ngoặc đóng cuối cùng của class second.
Sau khi đã tính được Can Chi ta set nó ra TextView tv mà ta đã khai báo.
Nếu bạn làm đúng, code trong cái nút “Đổi năm” tức Button 1 sẽ trông như sau. 

Nếu thấy lỗi đỏ, kiểm tra xem đã import hết thư viện chưa, xem các ngoặc mở đóng đủ chưa. Mở ra bao nhiêu, đóng lại bấy nhiêu, không được thiếu thừa.
Chạy thử, thay đổi năm để xem năm âm lịch đổi theo, thử không nhập gì, sẽ có thông báo chỗ bàn phím.
Thử nhập kèm dấu chấm, phảy xem sao. Ấn nút Quit để thoát.
Như vậy bài này ta đã làm ứng dụng đổi dương lịch ra âm lịch. Ta học được về EditText, lệnh Toast, cách mở ra màn hình mới, trở về màn hình trước. Ta thấy cú pháp lệnh, cách khai báo, dùng phương thức trong Android cũng y như Java.

Hãy nhìn chữ this trong lệnh Toast, nó chỉ class hiện tại tức second, second.this là Context cần phải có, nhưng bạn không biết cũng chả sao, vì nó là thủ tục, cứ copy cả đoạn lệnh là được rồi.
Do đó học bằng thực hành lợi như vậy. Rất nhiều từ khóa ta không cần biết nó là gì, chỉ cần biết cả đoạn lệnh ấy nó làm cái gì, như với Toast là để gửi thông báo ra màn hình cho người dùng. Thế là lần sau chỗ nào cần ta cứ copy cả đoạn vào.

Khỏi cần đọc lý thuyết nhức óc chả tích sự gì.

No comments:

Post a Comment