đây là bài cuối cùng trong loạt bài hướng dẫn về user interface trong android hy vọng rằng các bạn sẽ áp dụng tốt để xử lý tốt phần giao diện cho chương trình bnote. trong bài này chúng ta sẽ tiếp tục làm quen với các menu, và một số cool views như:
  • context menu
  • options menu
  • analogclock
  • digitalclock
  • webview
chú ý: các project trong bài này sẽ sử dụng project trong bài trước.
menus

menu rất hữu ích cho việc hiển thị các tùy chọn cần bổ sung mà không cần nhìn thấy trực tiếp nó trên giao diện của ứng dụng. có 2 loại menus trong android:
  • contextmenu - hiển thị thông tin liên quan đến một view cụ thể nào đó trong activity. trong android, để kích hoạt contextmenu bạn bấm và giữ (press and hold) view đó.
  • optionsmenu - hiển thị thông tin liên quan đến activity hiện tại. trong android, bạn kích hoạt optionsmenu bằng cách bấm phím menu.
hình sau cho thấy một ví dụ về optionsmenu trong ứng dụng browser. optionsmenu được hiển thị mỗi khi người dùng nhấn nút menu. các item trong menu được hiển thị phụ thuộc vào activity hiện tại đang chạy.




hình sau cho thấy contextmenu được hiển thị khi người dùng "press and hold" vào một liên kết được hiển thị trên trang. các menu items hiển thị phụ thuộc vào thành phần hoặc view hiện đang được chọn. để kích hoạt contextmenu, người sử dụng chọn một item trên màn hình hiển thị rồi "press and hold" nó hoặc đơn giản nhấn nút giữa trên bàn phím của emulator.




để xem menus sử dụng như thế nào trong android, bạn thêm 1 file menu.xml trong res/layout như sau:


Mã nguồn PHP:
[color=#000000]
[/color][color=#007700]<?[/color][color=#0000bb]xml version[/color][color=#007700]=[/color][color=#dd0000]"1.0" [/color][color=#0000bb]encoding[/color][color=#007700]=[/color][color=#dd0000]"utf-8"[/color][color=#0000bb]?>[/color]<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/btn1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text = "hello, world!" /> </linearlayout>
sau đó, thêm một lớp mới là menuexample vào src/net.learn2develop.androidviews. nhớ khai báo sử dụng activity mới trong file androidmanifest.xml như sau:


Mã nguồn PHP:
[color=#000000]
[/color][color=#007700]<?[/color][color=#0000bb]xml version[/color][color=#007700]=[/color][color=#dd0000]"1.0" [/color][color=#0000bb]encoding[/color][color=#007700]=[/color][color=#dd0000]"utf-8"[/color][color=#0000bb]?>[/color]<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.learn2develop.androidviews" android:versioncode="1" android:versionname="1.0.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".viewsactivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name=".menuexample" android:label="@string/app_name" /> </application></manifest>
creating the helper methods
đối với các ví dụ trong phần này, bạn sẽ tạo hai phương thức trợ giúp trong file menuexample.java là: createmenu() và menuchoice(). định nghĩa 2 phương thức trên trong phương thức oncreate() như sau:


Mã nguồn PHP:
[color=#000000]
package net[/color][color=#007700].[/color][color=#0000bb]learn2develop[/color][color=#007700].[/color][color=#0000bb]androidviews[/color][color=#007700]; [/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]app[/color][color=#007700].[/color][color=#0000bb]activity[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]os[/color][color=#007700].[/color][color=#0000bb]bundle[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]view[/color][color=#007700].[/color][color=#0000bb]menu[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]view[/color][color=#007700].[/color][color=#0000bb]menuitem[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]widget[/color][color=#007700].[/color][color=#0000bb]button[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]widget[/color][color=#007700].[/color][color=#0000bb]toast[/color][color=#007700]; public class [/color][color=#0000bb]menuexample [/color][color=#007700]extends [/color][color=#0000bb]activity[/color][color=#007700]{ @[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]void oncreate[/color][color=#007700]([/color][color=#0000bb]bundle savedinstancestate[/color][color=#007700]) { [/color][color=#0000bb]super[/color][color=#007700].[/color][color=#0000bb]oncreate[/color][color=#007700]([/color][color=#0000bb]savedinstancestate[/color][color=#007700]); [/color][color=#0000bb]setcontentview[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]layout[/color][color=#007700].[/color][color=#0000bb]menu[/color][color=#007700]); [/color][color=#0000bb]button btn [/color][color=#007700]= ([/color][color=#0000bb]button[/color][color=#007700]) [/color][color=#0000bb]findviewbyid[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]id[/color][color=#007700].[/color][color=#0000bb]btn1[/color][color=#007700]); [/color][color=#0000bb]btn[/color][color=#007700].[/color][color=#0000bb]setoncreatecontextmenulistener[/color][color=#007700]([/color][color=#0000bb]this[/color][color=#007700]); } private [/color][color=#0000bb]void createmenu[/color][color=#007700]([/color][color=#0000bb]menu menu[/color][color=#007700]) { [/color][color=#0000bb]menu[/color][color=#007700].[/color][color=#0000bb]setqwertymode[/color][color=#007700]([/color][color=#0000bb]true[/color][color=#007700]); [/color][color=#0000bb]menuitem mnu1 [/color][color=#007700]= [/color][color=#0000bb]menu[/color][color=#007700].[/color][color=#0000bb]add[/color][color=#007700]([/color][color=#0000bb]0[/color][color=#007700], [/color][color=#0000bb]0[/color][color=#007700], [/color][color=#0000bb]0[/color][color=#007700], [/color][color=#dd0000]"item 1"[/color][color=#007700]); { [/color][color=#0000bb]mnu1[/color][color=#007700].[/color][color=#0000bb]setalphabeticshortcut[/color][color=#007700]([/color][color=#dd0000]'a'[/color][color=#007700]); [/color][color=#0000bb]mnu1[/color][color=#007700].[/color][color=#0000bb]seticon[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]drawable[/color][color=#007700].[/color][color=#0000bb]alert_dialog_icon[/color][color=#007700]); } [/color][color=#0000bb]menuitem mnu2 [/color][color=#007700]= [/color][color=#0000bb]menu[/color][color=#007700].[/color][color=#0000bb]add[/color][color=#007700]([/color][color=#0000bb]0[/color][color=#007700], [/color][color=#0000bb]1[/color][color=#007700], [/color][color=#0000bb]1[/color][color=#007700], [/color][color=#dd0000]"item 2"[/color][color=#007700]); { [/color][color=#0000bb]mnu2[/color][color=#007700].[/color][color=#0000bb]setalphabeticshortcut[/color][color=#007700]([/color][color=#dd0000]'b'[/color][color=#007700]); [/color][color=#0000bb]mnu2[/color][color=#007700].[/color][color=#0000bb]seticon[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]drawable[/color][color=#007700].[/color][color=#0000bb]ic_popup_reminder[/color][color=#007700]); } [/color][color=#0000bb]menuitem mnu3 [/color][color=#007700]= [/color][color=#0000bb]menu[/color][color=#007700].[/color][color=#0000bb]add[/color][color=#007700]([/color][color=#0000bb]0[/color][color=#007700], [/color][color=#0000bb]2[/color][color=#007700], [/color][color=#0000bb]2[/color][color=#007700], [/color][color=#dd0000]"item 3"[/color][color=#007700]); { [/color][color=#0000bb]mnu3[/color][color=#007700].[/color][color=#0000bb]setalphabeticshortcut[/color][color=#007700]([/color][color=#dd0000]'c'[/color][color=#007700]); [/color][color=#0000bb]mnu3[/color][color=#007700].[/color][color=#0000bb]seticon[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]drawable[/color][color=#007700].[/color][color=#0000bb]icon[/color][color=#007700]); } [/color][color=#0000bb]menuitem mnu4 [/color][color=#007700]= [/color][color=#0000bb]menu[/color][color=#007700].[/color][color=#0000bb]add[/color][color=#007700]([/color][color=#0000bb]0[/color][color=#007700], [/color][color=#0000bb]3[/color][color=#007700], [/color][color=#0000bb]3[/color][color=#007700], [/color][color=#dd0000]"item 4"[/color][color=#007700]); { [/color][color=#0000bb]mnu4[/color][color=#007700].[/color][color=#0000bb]setalphabeticshortcut[/color][color=#007700]([/color][color=#dd0000]'d'[/color][color=#007700]); } [/color][color=#0000bb]menu[/color][color=#007700].[/color][color=#0000bb]add[/color][color=#007700]([/color][color=#0000bb]0[/color][color=#007700], [/color][color=#0000bb]3[/color][color=#007700], [/color][color=#0000bb]3[/color][color=#007700], [/color][color=#dd0000]"item 5"[/color][color=#007700]); [/color][color=#0000bb]menu[/color][color=#007700].[/color][color=#0000bb]add[/color][color=#007700]([/color][color=#0000bb]0[/color][color=#007700], [/color][color=#0000bb]3[/color][color=#007700], [/color][color=#0000bb]3[/color][color=#007700], [/color][color=#dd0000]"item 6"[/color][color=#007700]); [/color][color=#0000bb]menu[/color][color=#007700].[/color][color=#0000bb]add[/color][color=#007700]([/color][color=#0000bb]0[/color][color=#007700], [/color][color=#0000bb]3[/color][color=#007700], [/color][color=#0000bb]3[/color][color=#007700], [/color][color=#dd0000]"item 7"[/color][color=#007700]); } private [/color][color=#0000bb]boolean menuchoice[/color][color=#007700]([/color][color=#0000bb]menuitem item[/color][color=#007700]) { switch ([/color][color=#0000bb]item[/color][color=#007700].[/color][color=#0000bb]getitemid[/color][color=#007700]()) { case [/color][color=#0000bb]0[/color][color=#007700]: [/color][color=#0000bb]toast[/color][color=#007700].[/color][color=#0000bb]maketext[/color][color=#007700]([/color][color=#0000bb]this[/color][color=#007700], [/color][color=#dd0000]"you clicked on item 1"[/color][color=#007700], [/color][color=#0000bb]toast[/color][color=#007700].[/color][color=#0000bb]length_long[/color][color=#007700]).[/color][color=#0000bb]show[/color][color=#007700](); return [/color][color=#0000bb]true[/color][color=#007700]; case [/color][color=#0000bb]1[/color][color=#007700]: [/color][color=#0000bb]toast[/color][color=#007700].[/color][color=#0000bb]maketext[/color][color=#007700]([/color][color=#0000bb]this[/color][color=#007700], [/color][color=#dd0000]"you clicked on item 2"[/color][color=#007700], [/color][color=#0000bb]toast[/color][color=#007700].[/color][color=#0000bb]length_long[/color][color=#007700]).[/color][color=#0000bb]show[/color][color=#007700](); return [/color][color=#0000bb]true[/color][color=#007700]; case [/color][color=#0000bb]2[/color][color=#007700]: [/color][color=#0000bb]toast[/color][color=#007700].[/color][color=#0000bb]maketext[/color][color=#007700]([/color][color=#0000bb]this[/color][color=#007700], [/color][color=#dd0000]"you clicked on item 3"[/color][color=#007700], [/color][color=#0000bb]toast[/color][color=#007700].[/color][color=#0000bb]length_long[/color][color=#007700]).[/color][color=#0000bb]show[/color][color=#007700](); return [/color][color=#0000bb]true[/color][color=#007700]; case [/color][color=#0000bb]3[/color][color=#007700]: [/color][color=#0000bb]toast[/color][color=#007700].[/color][color=#0000bb]maketext[/color][color=#007700]([/color][color=#0000bb]this[/color][color=#007700], [/color][color=#dd0000]"you clicked on item 4"[/color][color=#007700], [/color][color=#0000bb]toast[/color][color=#007700].[/color][color=#0000bb]length_long[/color][color=#007700]).[/color][color=#0000bb]show[/color][color=#007700](); return [/color][color=#0000bb]true[/color][color=#007700]; case [/color][color=#0000bb]4[/color][color=#007700]: [/color][color=#0000bb]toast[/color][color=#007700].[/color][color=#0000bb]maketext[/color][color=#007700]([/color][color=#0000bb]this[/color][color=#007700], [/color][color=#dd0000]"you clicked on item 5"[/color][color=#007700], [/color][color=#0000bb]toast[/color][color=#007700].[/color][color=#0000bb]length_long[/color][color=#007700]).[/color][color=#0000bb]show[/color][color=#007700](); return [/color][color=#0000bb]true[/color][color=#007700]; case [/color][color=#0000bb]5[/color][color=#007700]: [/color][color=#0000bb]toast[/color][color=#007700].[/color][color=#0000bb]maketext[/color][color=#007700]([/color][color=#0000bb]this[/color][color=#007700], [/color][color=#dd0000]"you clicked on item 6"[/color][color=#007700], [/color][color=#0000bb]toast[/color][color=#007700].[/color][color=#0000bb]length_long[/color][color=#007700]).[/color][color=#0000bb]show[/color][color=#007700](); return [/color][color=#0000bb]true[/color][color=#007700]; case [/color][color=#0000bb]6[/color][color=#007700]: [/color][color=#0000bb]toast[/color][color=#007700].[/color][color=#0000bb]maketext[/color][color=#007700]([/color][color=#0000bb]this[/color][color=#007700], [/color][color=#dd0000]"you clicked on item 7"[/color][color=#007700], [/color][color=#0000bb]toast[/color][color=#007700].[/color][color=#0000bb]length_long[/color][color=#007700]).[/color][color=#0000bb]show[/color][color=#007700](); return [/color][color=#0000bb]true[/color][color=#007700]; } return [/color][color=#0000bb]false[/color][color=#007700]; } }[/color] 
phương thức createmenu()tạo ra một danh sách các menu items và thay đổi hành vi của mỗi items. các thông số tròn phương thức add() là: groupid, itemid, order, và title. phương thức setalphabeticshortcut() gán một phím tắt cho các menu items để khi người dùng nhấn một phím tắt, các menu items sẽ được chọn. phương thức seticon() gán một icon cho các menu items.
phương thức menuchoice()hiển thị menu items được chọn bằng cách sử dụng các toast để thông báo. tiếp theo, copy hai ảnh (như hình sau) vào res/drawable.




options menu

để hiển thị options menu trong activity, bạn cần phải ghi đè lên hai phương thức - oncreateoptionsmenu() và onoptionsitemselected(). oncreateoptionsmenu() được gọi khi nút menu được nhấn. trong trường hợp này, bạn sẽ gọi phương thức helper createmenu() để hiển thị options menu. khi một menu item được chọn, phương thức onoptionsitemselected() sẽ được gọi. trong trường hợp này,nó sẽ gọi menuchoice() để hiển thị các menu item được chọn (và làm những gì bạn cần làm):


Mã nguồn PHP:
[color=#000000]
[/color][color=#007700]public class [/color][color=#0000bb]menuexample [/color][color=#007700]extends [/color][color=#0000bb]activity[/color][color=#007700]{ @[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]void oncreate[/color][color=#007700]([/color][color=#0000bb]bundle savedinstancestate[/color][color=#007700]) { [/color][color=#0000bb]super[/color][color=#007700].[/color][color=#0000bb]oncreate[/color][color=#007700]([/color][color=#0000bb]savedinstancestate[/color][color=#007700]); [/color][color=#0000bb]setcontentview[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]layout[/color][color=#007700].[/color][color=#0000bb]menu[/color][color=#007700]); } private [/color][color=#0000bb]void createmenu[/color][color=#007700]([/color][color=#0000bb]menu menu[/color][color=#007700]) { [/color][color=#ff8000]//... [/color][color=#007700]} private [/color][color=#0000bb]boolean menuchoice[/color][color=#007700]([/color][color=#0000bb]menuitem item[/color][color=#007700]) { [/color][color=#ff8000]//... [/color][color=#007700]} [/color][color=#ff8000]//---only created once--- [/color][color=#007700]@[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]boolean oncreateoptionsmenu[/color][color=#007700]([/color][color=#0000bb]menu menu[/color][color=#007700]) { [/color][color=#0000bb]super[/color][color=#007700].[/color][color=#0000bb]oncreateoptionsmenu[/color][color=#007700]([/color][color=#0000bb]menu[/color][color=#007700]); [/color][color=#0000bb]createmenu[/color][color=#007700]([/color][color=#0000bb]menu[/color][color=#007700]); return [/color][color=#0000bb]true[/color][color=#007700]; } @[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]boolean onoptionsitemselected[/color][color=#007700]([/color][color=#0000bb]menuitem item[/color][color=#007700]) { return [/color][color=#0000bb]menuchoice[/color][color=#007700]([/color][color=#0000bb]item[/color][color=#007700]); } }[/color] 
sửa file viewsactivity.java để sử dụng activity vừa tạo như sau:


Mã nguồn PHP:
[color=#000000]
package net[/color][color=#007700].[/color][color=#0000bb]learn2develop[/color][color=#007700].[/color][color=#0000bb]androidviews[/color][color=#007700]; [/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]app[/color][color=#007700].[/color][color=#0000bb]activity[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]os[/color][color=#007700].[/color][color=#0000bb]bundle[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]content[/color][color=#007700].[/color][color=#0000bb]intent[/color][color=#007700]; public class [/color][color=#0000bb]viewsactivity [/color][color=#007700]extends [/color][color=#0000bb]activity [/color][color=#007700]{ [/color][color=#ff8000]/** called when the activity is first created. */ [/color][color=#007700]@[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]void oncreate[/color][color=#007700]([/color][color=#0000bb]bundle savedinstancestate[/color][color=#007700]) { [/color][color=#0000bb]super[/color][color=#007700].[/color][color=#0000bb]oncreate[/color][color=#007700]([/color][color=#0000bb]savedinstancestate[/color][color=#007700]); [/color][color=#0000bb]setcontentview[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]layout[/color][color=#007700].[/color][color=#0000bb]main[/color][color=#007700]); [/color][color=#0000bb]startactivity[/color][color=#007700](new [/color][color=#0000bb]intent[/color][color=#007700]([/color][color=#0000bb]this[/color][color=#007700], [/color][color=#0000bb]menuexample[/color][color=#007700].class)); }}[/color] 
kết quả như sau:




quan sát các biểu tượng hiển thị trên menu item 1, 2 và 3. ngoài ra, nếu optionsmenu đã có hơn 6 item, sẽ có một menu item khác để đại diện cho các menu items còn lại. hình bên phải cho thấy nhấn vào item "more" hiển thị các menu item còn lại trên một danh sách.
context menu

nếu bạn muốn kết hợp để hiển thị contextmenu trong activity bạn cần phải gọi phương thức setoncreatecontextmenulistener() cho 1 view cụ thể nào đó. trong ví dụ này tôi dùng button để kích hoạt contextmenu.



Mã:
package net.learn2develop.androidviews;
 
import android.app.activity;
import android.os.bundle;
import android.view.contextmenu;
import android.view.menu;
import android.view.menuitem;
import android.view.view;
import android.view.contextmenu.contextmenuinfo;
import android.widget.button;
import android.widget.toast;
 
public class menuexample extends activity
{   
    @override
    public void oncreate(bundle savedinstancestate)
    {
        super.oncreate(savedinstancestate);       
        setcontentview(r.layout.menu);     
 
        button btn = (button) findviewbyid(r.id.btn1);       
        btn.setoncreatecontextmenulistener(this);
    }
 
    private void createmenu(menu menu)
    {
        //...
    }
 
    private boolean menuchoice(menuitem item)
    {       
        //...
    }
 
    //---only created once---
    @override
    public boolean oncreateoptionsmenu(menu menu)
    {
        super.oncreateoptionsmenu(menu);
        createmenu(menu);
        return true;
    }
 
    @override
    public boolean onoptionsitemselected(menuitem item)
    {   
        return menuchoice(item);   
    }
 
    @override
    public void oncreatecontextmenu(contextmenu menu, view view,
    contextmenuinfo menuinfo)
    {
        super.oncreatecontextmenu(menu, view, menuinfo);
        createmenu(menu);
    }
 
    @override
    public boolean oncontextitemselected(menuitem item)
    {   
        return menuchoice(item);   
    }   
 
}
chú ý: thường thì chúng ta sẽ sử dụng listview để kích hoạt contextmenu. và gọi phương thức registerforcontextmenu() trong phương thức oncreate()

cũng giống như optionsmenu, bạn cần phải ghi đè 2 phương thức oncreatecontextmenu() và oncontextitemselected(). press and hold button bạn sẽ thấy contextmenu hiển thị như hình sau:




some additional views

bên cạnh những view chuẩn mà bạn đã thấy cho đến thời điểm này, android sdk còn cung cấp một số view thú vị khác làm cho các ứng dụng của bạn trở nên thú vị hơn. trong phần sau ta sẽ tìm hiểu nhưng view sau:
  • analogclock
  • digitalclock
  • webview
analogclock and digitalclock views

analogclock hiển thị một chiếc đồng hồ analog. viết file main.xml như sau:



Mã nguồn PHP:
[color=#000000]
[/color][color=#007700]<?[/color][color=#0000bb]xml version[/color][color=#007700]=[/color][color=#dd0000]"1.0" [/color][color=#0000bb]encoding[/color][color=#007700]=[/color][color=#dd0000]"utf-8"[/color][color=#0000bb]?>[/color]<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <analogclock android:id="@+id/clock1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </linearlayout>
trong file viewsactivity.java, chắc chắn rằng file main.xml được load như ui cho activity này:


Mã nguồn PHP:
[color=#000000]
package net[/color][color=#007700].[/color][color=#0000bb]learn2develop[/color][color=#007700].[/color][color=#0000bb]androidviews[/color][color=#007700]; [/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]app[/color][color=#007700].[/color][color=#0000bb]activity[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]os[/color][color=#007700].[/color][color=#0000bb]bundle[/color][color=#007700]; public class [/color][color=#0000bb]viewsactivity [/color][color=#007700]extends [/color][color=#0000bb]activity[/color][color=#007700]{ [/color][color=#ff8000]/** called when the activity is first created. */ [/color][color=#007700]@[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]void oncreate[/color][color=#007700]([/color][color=#0000bb]bundle savedinstancestate[/color][color=#007700]) { [/color][color=#0000bb]super[/color][color=#007700].[/color][color=#0000bb]oncreate[/color][color=#007700]([/color][color=#0000bb]savedinstancestate[/color][color=#007700]); [/color][color=#0000bb]setcontentview[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]layout[/color][color=#007700].[/color][color=#0000bb]main[/color][color=#007700]); }}[/color] 
kết quả:




thay vì là một đồng hồ analog, bạn có thể hiển thị một đồng hồ số bằng cách sử dụng digitalclock.
thêm các phần tử digitalclock vào file main.xml như sau:


Mã nguồn PHP:
[color=#000000]
[/color][color=#007700]<?[/color][color=#0000bb]xml version[/color][color=#007700]=[/color][color=#dd0000]"1.0" [/color][color=#0000bb]encoding[/color][color=#007700]=[/color][color=#dd0000]"utf-8"[/color][color=#0000bb]?>[/color]<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <analogclock android:id="@+id/clock1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <digitalclock android:id="@+id/clock2" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </linearlayout>
kết quả:




webview

webview cho phép bạn nhúng một trình duyệt web vào ứng dụng android. thêm một file ebview.xml vào res/layout như sau:


Mã nguồn PHP:
[color=#000000]
[/color][color=#007700]<?[/color][color=#0000bb]xml version[/color][color=#007700]=[/color][color=#dd0000]"1.0" [/color][color=#0000bb]encoding[/color][color=#007700]=[/color][color=#dd0000]"utf-8"[/color][color=#0000bb]?>[/color]<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <webview android:id="@+id/webview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text = "hello, world!" /> </linearlayout>
thêm 1 class mới tên là webviewexample trong src/net.learn2develop.androidviews, như sau:


Mã nguồn PHP:
[color=#000000]
package net[/color][color=#007700].[/color][color=#0000bb]learn2develop[/color][color=#007700].[/color][color=#0000bb]androidviews[/color][color=#007700]; [/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]app[/color][color=#007700].[/color][color=#0000bb]activity[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]os[/color][color=#007700].[/color][color=#0000bb]bundle[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]webkit[/color][color=#007700].[/color][color=#0000bb]webview[/color][color=#007700]; public class [/color][color=#0000bb]webviewexample [/color][color=#007700]extends [/color][color=#0000bb]activity[/color][color=#007700]{ [/color][color=#ff8000]/** called when the activity is first created. */ [/color][color=#007700]@[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]void oncreate[/color][color=#007700]([/color][color=#0000bb]bundle savedinstancestate[/color][color=#007700]) { [/color][color=#0000bb]super[/color][color=#007700].[/color][color=#0000bb]oncreate[/color][color=#007700]([/color][color=#0000bb]savedinstancestate[/color][color=#007700]); [/color][color=#0000bb]setcontentview[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]layout[/color][color=#007700].[/color][color=#0000bb]webview[/color][color=#007700]); [/color][color=#0000bb]webview wv [/color][color=#007700]= ([/color][color=#0000bb]webview[/color][color=#007700]) [/color][color=#0000bb]findviewbyid[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]id[/color][color=#007700].[/color][color=#0000bb]webview1[/color][color=#007700]); [/color][color=#0000bb]wv[/color][color=#007700].[/color][color=#0000bb]loadurl[/color][color=#007700]([/color][color=#dd0000]"http://www.mobiforge.com"[/color][color=#007700]); }}[/color] 
phương thức loadurl() của lớp webview sẽ tải một trang của một url nhất định. sửa đổi file androidmanifest.xml để đăng ký activity mới cũng như yêu cầu cho phép sử dụng internet:


Mã nguồn PHP:
[color=#000000]
[/color][color=#007700]<?[/color][color=#0000bb]xml version[/color][color=#007700]=[/color][color=#dd0000]"1.0" [/color][color=#0000bb]encoding[/color][color=#007700]=[/color][color=#dd0000]"utf-8"[/color][color=#0000bb]?>[/color]<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.learn2develop.androidviews" android:versioncode="1" android:versionname="1.0.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".viewsactivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name=".webviewexample" android:label="@string/app_name" /> </application> <uses-permission android:name="android.permission.internet"> </uses-permission> <uses-sdk android:minsdkversion="3" /> </manifest>
bạn thấy rằng chúng ta đã xin phép sử dụng kết nối internet bằng dòng:


Mã nguồn PHP:
[color=#000000]
[/color][color=#007700]<[/color][color=#0000bb]uses[/color][color=#007700]-[/color][color=#0000bb]permission android[/color][color=#007700]:[/color][color=#0000bb]name[/color][color=#007700]=[/color][color=#dd0000]"android.permission.internet"[/color][color=#007700]> </[/color][color=#0000bb]uses[/color][color=#007700]-[/color][color=#0000bb]permission[/color][color=#007700]>[/color] 
sửa đổi file viewsactivity.java như sau để sử dụng activity webviewexample:




Mã nguồn PHP:
[color=#000000]
package net[/color][color=#007700].[/color][color=#0000bb]learn2develop[/color][color=#007700].[/color][color=#0000bb]androidviews[/color][color=#007700]; [/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]app[/color][color=#007700].[/color][color=#0000bb]activity[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]os[/color][color=#007700].[/color][color=#0000bb]bundle[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]content[/color][color=#007700].[/color][color=#0000bb]intent[/color][color=#007700]; public class [/color][color=#0000bb]viewsactivity [/color][color=#007700]extends [/color][color=#0000bb]activity [/color][color=#007700]{ [/color][color=#ff8000]/** called when the activity is first created. */ [/color][color=#007700]@[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]void oncreate[/color][color=#007700]([/color][color=#0000bb]bundle savedinstancestate[/color][color=#007700]) { [/color][color=#0000bb]super[/color][color=#007700].[/color][color=#0000bb]oncreate[/color][color=#007700]([/color][color=#0000bb]savedinstancestate[/color][color=#007700]); [/color][color=#0000bb]setcontentview[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]layout[/color][color=#007700].[/color][color=#0000bb]main[/color][color=#007700]); [/color][color=#0000bb]startactivity[/color][color=#007700](new [/color][color=#0000bb]intent[/color][color=#007700]([/color][color=#0000bb]this[/color][color=#007700], [/color][color=#0000bb]webviewexample[/color][color=#007700].class)); }}[/color] 
kết quả:




bạn cũng có thể tự động xây dựng một chuỗi html và load nó vào webview, sử dụng phương thức loaddatawithbaseurl ():


Mã nguồn PHP:
[color=#000000]
webview wv [/color][color=#007700]= ([/color][color=#0000bb]webview[/color][color=#007700]) [/color][color=#0000bb]findviewbyid[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]id[/color][color=#007700].[/color][color=#0000bb]webview1[/color][color=#007700]); final [/color][color=#0000bb]string mimetype [/color][color=#007700]= [/color][color=#dd0000]"text/html"[/color][color=#007700]; final [/color][color=#0000bb]string encoding [/color][color=#007700]= [/color][color=#dd0000]"utf-8"[/color][color=#007700]; [/color][color=#0000bb]string html [/color][color=#007700]= [/color][color=#dd0000]"<h1>a simple html page</h1><body>" [/color][color=#007700]+ [/color][color=#dd0000]"<p>the quick brown fox jumps over the lazy dog</p>"[/color][color=#007700]; [/color][color=#0000bb]wv[/color][color=#007700].[/color][color=#0000bb]loaddatawithbaseurl[/color][color=#007700]([/color][color=#dd0000]""[/color][color=#007700], [/color][color=#0000bb]html[/color][color=#007700], [/color][color=#0000bb]mimetype[/color][color=#007700], [/color][color=#0000bb]encoding[/color][color=#007700], [/color][color=#dd0000]""[/color][color=#007700]);[/color] 
kết quả:




nếu bạn có các trang web tĩnh mà bạn muốn tải trực tiếp từ project của bạn, bạn có thể lưu các trang html trong thư mục assets của project. hình sau :tôi đã thêm một trang tên là index.html trong thư mục assets.




nội dung file index.html như sau:




Mã nguồn PHP:
[color=#000000]
[/color][color=#007700]<[/color][color=#0000bb]h1[/color][color=#007700]>[/color][color=#0000bb]a simple html page[/color][color=#007700]</[/color][color=#0000bb]h1[/color][color=#007700]><[/color][color=#0000bb]body[/color][color=#007700]> <[/color][color=#0000bb]p[/color][color=#007700]>[/color][color=#0000bb]the quick brown fox jumps over the lazy dog[/color][color=#007700]</[/color][color=#0000bb]p[/color][color=#007700]> <[/color][color=#0000bb]img src[/color][color=#007700]=[/color][color=#dd0000]'http://www.google.com/logos/logo_60wht.gif'[/color][color=#007700]/></[/color][color=#0000bb]body[/color][color=#007700]>[/color] 
để tải, webview sử dụng nội dung lưu trữ trong file index.html, sử dụng phương thức loadurl()như sau:


Mã nguồn PHP:
[color=#000000]
webview wv [/color][color=#007700]= ([/color][color=#0000bb]webview[/color][color=#007700]) [/color][color=#0000bb]findviewbyid[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]id[/color][color=#007700].[/color][color=#0000bb]webview1[/color][color=#007700]); [/color][color=#0000bb]wv[/color][color=#007700].[/color][color=#0000bb]loadurl[/color][color=#007700]([/color][color=#dd0000]"file:///android_asset/index.html"[/color][color=#007700]);[/color] 
kết quả:




summary

trong bài viết này, bạn đã thấy làm thế nào để thực hiện contextmenu và optionsmenu trong các ứng dụng android. ngoài ra, bạn cũng đã thấy cách sử dụng một số views khác, chẳng hạn như các analogclock và digitalclock. tôi hy vọng bây giờ bạn đã nắm rất nhiều views làm việc như thế nào trong android. các lesson tiếp theo sẽ đề cập kỹ hơn về list. do nhóm view này quan trọng và khá phức tạp nên tôi sẽ có một bài viết riêng để các bạn có thể hiểu rõ hơn cách sử dụng chúng, và mong rằng các bạn sẽ tùy chỉnh và điều khiển thành thạo nhóm view này.