Basic Lesson 1: - Cơ bản Android

Thảo luận trong 'Khóa học lập trình Android' bắt đầu bởi Nem, 20/3/13.

  1. Nem

    Nem Moderator

    Lượt xem: 10,745
    Understanding Android Application:

    Việc hiểu được các thành phần (component) tạo nên một ứng dụng Android là rất cần thiết cho việc lập trình. Các thành phần này được chia làm 6 loại bao gồm:
    • 1.Activity: hiểu một cách đơn giản thì Activity là nền của 1 ứng dụng. Khi khởi động 1 ứng dụng Android nào đó thì bao giờ cũng có 1 main Activity được gọi, hiển thị màn hình giao diện của ứng dụng cho phép người dùng tương tác.
    • 2.Service: thành phần chạy ẩn trong Android. Service sử dụng để update dữ liệu, đưa ra các cảnh báo (Notification) và không bao giờ hiển thị cho người dùng thấy.
    • 3.Content Provider: kho dữ liệu chia sẻ. Content Provider được sử dụng để quản lý và chia sẻ dữ liệu giữa các ứng dụng.
    • 4.Intent: nền tảng để truyền tải các thông báo. Intent được sử dụng để gửi các thông báo đi nhằm khởi tạo 1 Activity hay Service để thực hiện công việc bạn mong muốn. VD: khi mở 1 trang web, bạn gửi 1 intent đi để tạo 1 activity mới hiển thị trang web đó.
    • 5.Broadcast Receiver: thành phần thu nhận các Intent bên ngoài gửi tới. VD: bạn viết 1 chương trình thay thế cho phần gọi điện mặc định của Android, khi đó bạn cần 1 BR để nhận biết các Intent là các cuộc gọi tới.
    • 6.Notification: đưa ra các cảnh báo mà không làm cho các Activity phải ngừng hoạt động.
    Activity, Service, Broadcast Receiver và Content Provider mới là những thành phần chính cấu thành nên ứng dụng Android, bắt buộc phải khai báo trong AndroidManifest.
    • Ví dụ:
    Để thêm 1 Activity có tên là ViduActivity bạn cần khai báo thêm trong file AndroidManifest.xml như sau:

    PHP:
    <activity android:name ".ViduActivity"
    android:label="@string/app_name"/>
    .
    Để khai báo them 1 ContentProvider:

    PHP:
    <provider android:name="BooksProvider"
    android:authorities="com.namnd.gingerbread" />
    .
    trong đó "com.namnd.gingerbread" là tên package chứa file BooksProvider.java
    Understanding Android Application Life Cycle:

    Android có cơ chế quản lý các process theo chế độ ưu tiên. Các process có priority thấp sẽ bị Android giải phóng mà không hề cảnh báo nhằm đảm bảo tài nguyên.
    • 1.Foreground process: là process của ứng dụng hiện thời đang được người dùng tương tác.
    • 2.Visible process: là process của ứng dụng mà activity đang hiển thị đối với người dùng (onPaused() của activity được gọi).
    • 3.Service process: là Service đang running.
    • 4.Background process: là process của ứng dụng mà các activity của nó ko hiển thị với người dùng (onStoped() của activity được gọi).
    • 5.Empty process: process không có bất cứ 1 thành phần nào active.
    Theo chế độ ưu tiên thì khi cần tài nguyên, Android sẽ tự động kill process, trước tiên là các empty process.
    Android Activity Life Cycle:Như mình đã giới thiệu ở trên , Actitvity là thành phần quan trọng nhất và đóng vai trò chính trong xây dựng ứng dụng Android. Hệ điều hành Android quản lý Activity theo dạng stack: khi một Activity mới được khởi tạo, nó sẽ được xếp lên đầu của stack và trở thành running activity, các Activity trước đó sẽ bị tạm dừng và chỉ hoạt động trở lại khi Activity mới được giải phóng.
    Activity bao gồm 4 state:
    • - active (running): Activity đang hiển thị trên màn hình (foreground).
    • - paused: Activity vẫn hiển thị (visible) nhưng không thể tương tác (lost focus). VD: một activity mới xuất hiện hiển thị giao diện đè lên trên activity cũ, nhưng giao diện này nhỏ hơn giao diện của activity cũ, do đó ta vẫn thấy được 1 phần giao diện của activity cũ nhưng lại không thể tương tác với nó.
    • - stop: Activity bị thay thế hoàn toàn bởi Activity mới sẽ tiến đến trạng thái stop
    • - killed: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến trình theo nguyên tắc ưu tiên. Các Activity ở trạng thái stop hoặc paused cũng có thể bị giải phóng và khi nó được hiển thị lại thì các Activity này phải khởi động lại hoàn toàn và phục hồi lại trạng thái trước đó.
    Biểu đồ miêu tả Activity state
    Lifecycle
    • Vòng đời của Activity:
    • - Entire lifetime: Từ phương thức onCreate( ) cho tới onDestroy( )
    • - Visible liftetime: Từ phương thức onStart( ) cho tới onStop( )
    • - Foreground lifetime: Từ phương thức onResume( ) cho tới onPause( )
    Khi xây dựng Actitvity cho ứng dụng cần phải viết lại phương thức onCreate( ) để thực hiện quá trình khởi tạo. Các phương thức khác có cần viết lại hay không tùy vào yêu cầu lập trình.
    XML trong Android:

    Không giống như lập trình java thông thường, lập trình android ngoài các lớp được viết trong *.java còn sử dụng XML để thiết kế giao diện cho ứng dụng. Tất nhiên bạn hoàn toàn có thể thiết kế 1 giao diện như ý muốn mà không cần tới bất cứ 1 dòng XML nào, nhưng sd XML sẽ đơn giản công việc đi rất nhiều. Đồng thời sd XML sẽ giúp việc chỉnh sửa ứng dụng sau này trở nên dễ dàng.
    Về nguyên tắc, khi lập trình ứng dụng ta thiết kế giao diện bằng XML và cài đặt các xử lý khi tương tác với giao diện trong code.
    Một số thành phần cơ bản trong Android:

    1.Các layout:

    Layout được dùng để quản lý các thành phần giao diện khác theo 1 trật tự nhất định.
    • FrameLayout: là một trình giữ chỗ trên màn hình mà bạn có thể sử dụng để hiển thị một điểm duy nhất. Lượt xem mà bạn thêm vào một FrameLayout luôn đặt vào phía trên bên trái của màn hình. Xem xét các nội dung sau đây trong file main.xml:
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <AbsoluteLayout
    android:id="@+id/widget68"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
    >
    <FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="40px"
    android:layout_y="35px"
    >
    <ImageView
    android:src = "@drawable/androidlogo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
    </FrameLayout>
    </AbsoluteLayout>
    Ở đây, bạn có một FrameLayout trong một AbsoluteLayout. Trong FrameLayout, bạn nhúng một ImageView. UI được thể hiện trong hình sau:
    Note: Ví dụ này giả định rằng trong folder res / drawable ảnh được đặt tên androidlogo.png.
    And-ui-10
    Nếu bạn thêm một View khác (chẳng hạn như một Button) trong vòng FrameLayout, View này sẽ chồng lên View trước đó (xem hình):
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <AbsoluteLayout
    android:id="@+id/widget68"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
    >
    <FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="40px"
    android:layout_y="35px"
    >
    <ImageView
    android:src = "@drawable/androidlogo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
    <Button
    android:layout_width="124px"
    android:layout_height="wrap_content"
    android:text="Print Picture"
    />
    </FrameLayout>
    </AbsoluteLayout>
    And-ui-11
    • LinearLayout: Việc sắp xếp các view trong một cột hoặc hàng đơn. Child View có thể được bố trí theo chiều dọc hoặc chiều ngang. Để xem LinearLayout dùng thế nào, chúng ta hãy sửa đổi các file main.xml trong Project:
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
    android:eek:rientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
    </LinearLayout>
    Trong file main.xml, quan sát rằng các phần tử gốc là <LinearLayout> và nó có một phần tử <TextView> chứa bên trong nó. Các phần tử <LinearLayout> điều khiển thứ tự các điểm chứa bên trong nó xuất hiện. Mỗi View và ViewGroup có một tập các thuộc tính phổ biến, một số trong đó được thể hiện trong Bảng sau đây.
    Viewnviewgroups
    Table 1 Common attributes of views and viewgroups
    Lưu ý rằng một số trong những thuộc tính này chỉ áp dụng khi xem một View cụ thể trong một số ViewGroups. Ví dụ, các thuộc tính layout_weight và layout_gravity là chỉ áp dụng nếu một View là trong một LinearLayout hoặc TableLayout. Ví dụ, các phần tử <TextView> trên có chiều rộng đầy toàn bộ chiều rộng của của View cha (mà là màn hình trong trường hợp này) bằng cách sử dụng fill_parent. Chiều cao của nó chỉ là wrap_content, có nghĩa là chiều cao của nó là chiều cao của nội dung của nó (trong trường hợp này, các văn bản chứa trong nó). Nếu bạn không muốn có xem <TextView> chiếm toàn bộ hàng, bạn có thể đặt thuộc tính layout_width của mình để wrap_content, như thế này:
    PHP:
    <TextView
    android
    :layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
    Điều này sẽ thiết lập chiều rộng của view bằng bề rộng của văn bản chứa trong nó. Bạn cũng có thể thiết lập chiều rộng đến một giá trị tuyệt đối (set cứng), như thế này:
    PHP:
    <TextView
    android
    :layout_width="105px"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
    Trong trường hợp này, chiều rộng được thiết lập đến 105px. Hãy thay đổi file main.xml bằng cách thêm một view <Button> như hình dưới đây:
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
    >
    <TextView
    android:layout_width="105px"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
    <Button
    android:layout_width="100px"
    android:layout_height="wrap_content"
    android:text="Button"
    />
    </LinearLayout>
    Hình sau cho thấy các view đặt từ trái sang phải.
    And-ui-3
    Mặc định của LinearLayout được thiết lập để nằm ngang . Nếu bạn muốn thay đổi định hướng của mình để thẳng đứng, thiết lập các thuộc tính orientation = "vertical", như thế này:
    PHP:
    <LinearLayout
    android
    :layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:eek:rientation="vertical"
    xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
    >
    And-ui-4
    Trong LinearLayout, bạn có thể áp dụng các thuộc tính layout_weight và layout_gravity của các view chứa bên trong nó, như những sửa đổi sau đây trong main.xml cho thấy :
    PHP:
    ?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
    android:eek:rientation="vertical"
    >
    <TextView
    android:layout_width="105px"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
    <Button
    android:layout_width="100px"
    android:layout_height="wrap_content"
    android:text="Button"
    android:layout_gravity="right"
    android:layout_weight="0.2"
    />
    <EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:layout_weight="0.8"
    />
    </LinearLayout>
    Hình sau cho thấy button được liên kết đến các view cha của nó (đó là LinearLayout) bằng cách sử dụng các thuộc tính layout_gravity. Đồng thời, bạn sử dụng thuộc tính layout_weight để xác định tỷ lệ trong đó Button và EditText chiếm không gian còn lại trên màn hình. Tổng giá trị cho các thuộc tính layout_weight phải bằng 1.
    And-ui-5
    Chú ý: không nên set cứng 1 thuộc tính của view. vì trên nhiều dòng máy chạy android khác nhau sẽ có các kích thước màn hình khác nhau.điều đó sẽ khiến giao diện mà mình tạo ra sẽ có thay đổi không như ý muốn trên dòng máy khác.
    • RelativeLayout: thêm các thành phần con dựa trên mối quan hệ với các thành phần khác hoặc với biên của layout.Xem xét các tập tin sau đây main.xml:
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    android:id="@+id/RLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
    >
    <TextView
    android:id="@+id/lblComments"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Comments"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    />
    <EditText
    android:id="@+id/txtComments"
    android:layout_width="fill_parent"
    android:layout_height="170px"
    android:textSize="18sp"
    android:layout_alignLeft="@+id/lblComments"
    android:layout_below="@+id/lblComments"
    android:layout_centerHorizontal="true"
    />
    <Button
    android:id="@+id/btnSave"
    android:layout_width="125px"
    android:layout_height="wrap_content"
    android:text="Save"
    android:layout_below="@+id/txtComments"
    android:layout_alignRight="@+id/txtComments"
    />
    <Button
    android:id="@+id/btnCancel"
    android:layout_width="124px"
    android:layout_height="wrap_content"
    android:text="Cancel"
    android:layout_below="@+id/txtComments"
    android:layout_alignLeft="@+id/txtComments"
    />
    </RelativeLayout>
    Chú ý rằng mỗi view nhúng vào trong các RelativeLayout có các thuộc tính cho phép chúng liên kết với view khác. Những thuộc tính này là:
    * layout_alignParentTop
    * layout_alignParentLeft
    * layout_alignLeft
    * layout_alignRight
    * layout_below
    * layout_centerHorizontal

    File xml trên tạo ra giao diện sau đây:
    And-ui-9
    • TableLayout: nhóm các view thành các hàng và cột. Bạn sử dụng các yếu tố <TableRow> để chỉ một hàng trong table. Mỗi hàng có thể chứa một hoặc nhiều views. Mỗi view bạn đặt bên trong tạo thành một ô. Chiều rộng của mỗi cột được xác định bởi độ rộng lớn nhất của mỗi ô trong cột đó.
    Thông thường main.xml với các yếu tố sau đây và cho ra giao diện người dùng như trong hình dưới đây:
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <TableLayout
    xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:background="#000044">
    <TableRow>
    <TextView
    android:text="User Name:"
    android:width ="120px"
    />
    <EditText
    android:id="@+id/txtUserName"
    android:width="200px" />
    </TableRow>
    <TableRow>
    <TextView
    android:text="Password:"
    />
    <EditText
    android:id="@+id/txtPassword"
    android:password="true"
    />
    </TableRow>
    <TableRow>
    <TextView />
    <CheckBox android:id="@+id/chkRememberPassword"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Remember Password"
    />
    </TableRow>
    <TableRow>
    <Button
    android:id="@+id/buttonSignIn"
    android:text="Log In" />
    </TableRow>
    </TableLayout>
    And-ui-7
    Lưu ý rằng trong ví dụ trên, có 2 cột và 4 hàng trong 1 TableLayout. Các ô dưới Password TextView là một Empty View. Nếu bạn không làm điều này, CheckBox Remember Password đó sẽ xuất hiện dưới Password TextView, như hình sau:
    And-ui-8
    • AbsoluteLayout: thêm các thành phần con dựa theo tọa độ x, y.. Xem xét các giao diện sau đây được định nghĩa trong main.xml:
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <AbsoluteLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
    >
    <Button
    android:layout_width="188px"
    android:layout_height="wrap_content"
    android:text="Button"
    android:layout_x="126px"
    android:layout_y="361px"
    />
    <Button
    android:layout_width="113px"
    android:layout_height="wrap_content"
    android:text="Button"
    android:layout_x="12px"
    android:layout_y="361px"
    />
    </AbsoluteLayout>
    Hình dưới đây cho thấy hai button nằm tại các vị trí quy định bằng cách sử dụng và các thuộc tính android_layout_x android_layout_y.
    And-ui-6
    Tốt nhất bạn nên sử dụng AbsoluteLayout khi bạn cần phải định vị lại các view của bạn thay đổi khi xoay màn hình.
    • ScrollView: là một dạng đặc biệt của FrameLayout ở chỗ nó cho phép người dùng di chuyển qua một danh sách các quan điểm mà chiếm nhiều không gian hơn màn hình vật lý. Các ScrollView có thể chứa chỉ một Child View hay ViewGroup, mà thường là một LinearLayout.
    Layout được sử dụng nhằm mục đích thiết kế giao diện cho nhiều độ phân giải. Thường khi lập trình nên kết hợp nhiều layout với nhau để tạo ra giao diện bạn mong muốn.
    Lưu ý: Không sử dụng một ListView cùng với ScrollView. Các ListView được thiết kế để hiển thị một danh sách các thông tin liên quan và được tối ưu để phù hợp với các danh sách lớn.
    Các nội dung main.xml sau đây cho thấy một ScrollView có chứa một LinearLayout, Cái chứa Button và EditText:
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView
    android:id="@+id/widget54"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
    >
    <LinearLayout
    android:layout_width="310px"
    android:layout_height="wrap_content"
    android:eek:rientation="vertical"
    >
    <Button
    android:id="@+id/button1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Button 1"
    />
    <Button
    android:id="@+id/button2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Button 2"
    />
    <Button
    android:id="@+id/button3"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Button 3"
    />
    <EditText
    android:id="@+id/txt"
    android:layout_width="fill_parent"
    android:layout_height="300px"
    />
    <Button
    android:id="@+id/button4"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Button 4"
    />
    <Button
    android:id="@+id/button5"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Button 5"
    />
    </LinearLayout>
    </ScrollView>
    Hình sau cho thấy ScrollView hiển thị một thanh cuộn ở phía bên phải của màn hình. Người dùng có thể kéo màn hình lên để thấy các Views nằm ở dưới cùng của màn hình.
    And-ui-12
    SummaryTrong bài viết này, bạn đã thấy các bố trí khác nhau có sẵn trong Android để tạo ra giao diện người dùng của bạn. Trong quá trình cài đặt tiếp theo, bạn sẽ thấy những quan điểm khác nhau (widget) mà bạn có thể sử dụng trong Android để tạo ra các Killer Application tiếp theo của bạn. Cho đến khi ấy, vui vẻ!



    2.XML unit:

    Để hiểu được các thành phần cơ bản của XML cũng như việc sử dụng XML kết hợp với code, ta sẽ đi xây dựng thử một chương trình đơn giản. Yêu cầu: Xây dựng 1 ứng dụng cho phép gõ 1 nội dung vào rồi hiển thị ra nội dung đó ở bên dưới.
    • B1: Khởi tạo 1 project (ở đây sử dụng Eclipse để minh họa).
    Vào thẻ File -> New -> Android Project. Nếu bạn mới lập trình Android lần đầu thì có lẽ dòng Android Project sẽ không hiện ra, khi đó xuống phía cuối chọn Other rồi vào Android -> Android Project.
    • B2: Điền thông tin cho project
    Project name: Example 1 Build Target: Chọn Android 2.2 (mới nhất là 2.3 nhưng hiện tại bạn chưa cần quan tâm ) Application name: Example 1 Package name: at.exam Create Activity: Example => Kích nút Finish.
    • B3: Bên khung Package Explore bên trái đi tới thư mục res, bạn sẽ thấy có 3 thư mục con:
    - drawable: thư mục chứa các hình ảnh để làm icon hoặc tài nguyên cho giao diện... - layout: chứa các file xml để thiết kế giao diện. - values: chứa các giá trị sử dụng trong ứng dụng được bạn định nghĩa, như các dòng ký tự (string), các màu (color), các themes...
    • B4:Vào thư mục layout, chọn file main.xml và gõ đoạn code sau vào thay cho toàn bộ nội dung có sẵn (Eclipse hỗ trợ kéo thả cho xml nhưng theo mình không nên sử dụng):
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
    android:eek:rientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <EditText
    android:id="@+id/edit_text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/edit_hint"
    />
    <TextView
    android:id="@+id/text_view"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/text_color"
    android:textSize="28px"
    android:typeface="monospace"
    />
    </LinearLayout>
    Trong đoạn XML này chúng ta khai báo một Linear Layout với 2 thành phần con của nó là 1 Edit Text (dùng để gõ xâu ký tự) với 1 Text View (hiển thị xâu ký tự). Linear Layout được khai báo với từ khóa orientation nhằm chỉ ra chiều sắp xếp của 2 thành phần con là chiều dọc. Còn với layout_width, layout_height các bạn có thể cho giá trị bằng "fill_parent" hoặc "wrap_content" để thông báo thành phần này sẽ có chiều rộng (dài) phủ đầy thành phần cha hoặc chỉ vừa bao đủ nội dung. Trong Edit Text và Text View các bạn có thể thấy có từ khóa id, từ khóa này cho phép khai báo id của các thành phần để lấy về trong code (sẽ đề cập sau). Ngoài ra từ khóa hint trong Edit Text cho phép hiện ra phần nội dung mờ khi Edit Text vẫn chưa có ký tự nào. "@string/edit_hint" thông báo lấy trong file strings.xml xâu có tên là edit_hint. Còn textColor của Text View thì thông báo đoạn ký tự sẽ được hiển thị với màu lấy trong file colors.xml, textSize chỉ ra cỡ chữ bằng 28 pixel và typeface chỉ ra kiểu chữ là monospace
    • B5:Vẫn trong thư mục res, vào values và chọn file strings.xml. Bố sung thêm dòng định nghĩa cho edit_hint như sau:
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <string name="hello">Hello World, Example!</string>
    <string name="app_name">Example 1</string>
    <string name="edit_hint">Enter the work here</string>
    </resources>
    • B6:Trong thư mục values, tạo file colors.xml (chuột phải vào thư mục, chọn New -> Android XML File, và lưu ý chữ s, không phải là color.xml). Gõ nội dung cho file như sau:
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <color name="text_color">#ff3300</color>
    </resources>
    OK, vậy là bạn đã tạo một màu mới cho dòng chữ sẽ được hiển thị trong Text View (ff3300 là mã hexa của màu đỏ). Thực chất bạn hoàn toàn có thể gõ thẳng
    android:textColor="#ff3300"
    trong file main.xml mà không cần tạo mới file colors.xml, nhưng mục đích của XML trong Android chính là để hỗ trợ nâng cấp chỉnh sửa dễ dàng. Nếu sau này bạn muốn sửa màu của dòng text thì chỉ cần vào colors.xml thay đổi thay vì mò mẫm trong main.xml (có thể rất dài nếu giao diện phức tạp).
    Các thành phần trên mới chỉ là các phần cơ bản của XML. Ngoài ra các bạn có thể khai báo thêm về Animation, Style và Theme (phức tạp hơn nhiều nên mình không giới thiệu trong phần cơ bản này).
    • B7: Vậy là chúng ta đã hoàn thiện phần giao diện với XML, giờ đến viết code để xử lý các sự kiện cho các thành phần:
    => vào thư mục src (source code của project) => at.exam => Example.java, gõ nội dung code sau vào:
    PHP:
    package at.exam;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.View;
    import android.view.View.OnKeyListener;
    import android.widget.EditText;
    import android.widget.TextView;
     
    public class 
    Example extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     
    //Thiết lập giao diện lấy từ file main.xml
    setContentView(R.layout.main);
     
    //Lấy về các thành phần trong main.xml thông qua id
    final EditText edit = (EditTextfindViewById(R.id.edit_text);
    final 
    TextView text = (TextViewfindViewById(R.id.text_view);
     
    //Thiết lập xử lý cho sự kiện nhấn nút giữa của điện thoại
    edit.setOnKeyListener(new OnKeyListener() {
    @
    Override
    public boolean onKey(View vint keyCodeKeyEvent event) {
    if (
    event.getAction() == KeyEvent.ACTION_DOWN
    && keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
    text.setText(edit.getText().toString());
    edit.setText("");
    return 
    true;
    }
    else {
    return 
    false;
    }
    }
     
    });
    }
    }
    Dạo qua một chút kiến thức cơ bản: Trong Android, các lớp sử dụng để tạo giao diện (Edit Text, Text View...) đều là lớp con của lớp View. Một số lớp thường xuyên được sử dụng để tạo giao diện: - TextView - EditText - ListView - Spinner - CheckBox - Button - RadioButton
    Ngoài ra bạn còn có thể tạo 1 View riêng của mình bằng cách kế thừa View có sẵn.
    Các Listener được sử dụng để bắt 1 sự kiện nào đó. Ở đây mình sử dụng OnKeyListener dùng để bắt sự kiện khi nhấn 1 phím của điện thoại. Ngoài ra thường sử dụng OnClickListener để bắt sự kiện chạm vào 1 View đang hiển thị trên màn hình. Mỗi View đều phải set Listener riêng để xử lý cho sự kiện tương tác với nó, và mỗi loại View cũng lại có những Listener dành riêng cho nó (VD: CheckBox có OnCheckChangedListener) Ở đây mình sử dụng hàm dạng inner để định nghĩa xử lý cho OnKeyListener nên có thể mọi người không quen lắm, nhưng nó cũng nằm trong phần cơ bản của Java đấy nhé.
    Đề nghị lưu ý thêm phần R.id.edit_text. Để lấy hoặc truy nhập các thành phần ta đã định nghĩa trong XML ta phải sử dụng R.* như R.layout.main, R.id.edit_text. Lệnh findViewById sẽ trả về 1 View có Id thiết lập trong phần XML. Do View là lớp cha của EditText với TextView nên ở đây ta phải ép kiểu. Ngoài ra các string hay color cũng có thể lấy về bằng lệnh getResource() . Vd: getResource().getColor(R.color.text_color)
    • B8: Chạy chương trình. Chọn Run => Android Application và chờ cho emulator khởi động nhé. Ai có 1 Android thật có thể kết nối qua USB và thử nghiệm luôn. Tự chỉnh sửa trong code và trong XML để hiểu thêm về lập trình Android.
    VD:
    PHP:
    edit.setOnClickListener(new OnClickListener() {
    @
    Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
     
    }
     
    });
    hoặc trong XML thêm vào phần Text View
    android:textSize="50px"
    để xem chương trình thay đổi như thế nào nhé ^_^
    The End
    lesson 1, android, android bài 1, cơ bản, cơ bản android, bài 1
    hatb, congtuktkps2bi thích bài này.
  2. kps2bi

    kps2bi New Member

    bác ơi.cho e hỏi có pm nào bung và đóng gói xml trên mobile k ạ.phần 2 bài hưỡng dẫn trên bác dùng pm nào đấy ạ.cho e xin link với.e mới học lập trình os
  3. viet55pm

    viet55pm New Member

    lesson 2 đâu anh...o_O
  4. Thien Phu

    Thien Phu Member

    Cam on ban rat nhieu cac bai viet cua ban rat chi tiet va de hieu.mong doc duoc them nhieu bai viet khac cua ban. Neu co the ban viet 1 bai ve viec viet 1 ung dung chay tren nhieu may co do phan giai khac nhau (chu va hinh anh....) tu dong gian no...
  5. phungkhoi

    phungkhoi New Member

    Vào mục "tìm kiếm trong diễn đàn này"là thấy bạn...
    Mà chỉ thấy lesson 5 thôi ak,

Chia sẻ trang này