Professional Documents
Culture Documents
Chapter04-User-interface_publish (1)
Chapter04-User-interface_publish (1)
NỘI DUNG
Giao diện người dùng đồ họa
Widget và bố cục
Vài ví dụ
Machine Translated by Google
Nhà phát triển Android thấy mẫu này như thế nào? Mô
hình. Bao gồm mã Java và các đối tượng API được sử dụng để thể hiện vấn
đề kinh doanh và quản lý hành vi cũng như dữ liệu của ứng dụng.
Xem. Tập hợp các màn hình mà người dùng nhìn thấy và tương tác.
Bộ điều khiển. Được triển khai thông qua HĐH Android, chịu trách nhiệm giải
thích thông tin đầu vào của người dùng và hệ thống. Đầu vào có thể đến từ nhiều
nguồn khác nhau như bi xoay, bàn phím, màn hình cảm ứng, chip GPS, cảm biến
tiệm cận, gia tốc kế, v.v. và thông báo cho Mô hình và/hoặc Chế độ xem (thường
thông qua lệnh gọi lại và trình nghe đã đăng ký) thay đổi cho phù hợp .
Machine Translated by Google
Việc chuyển sang các trạng thái trong vòng đời gắn liền với logic trong mô hình. Ví dụ: nếu buộc phải Tạm dừng, bạn có
thể muốn lưu dữ liệu chưa được cam kết.
Cơ chế thông báo được sử dụng để thông báo cho người dùng về các sự kiện quan trọng xảy ra bên ngoài ứng dụng hiện tại
(chẳng hạn như tin nhắn văn bản hoặc email đến, pin yếu, biến động của thị trường chứng khoán, v.v.) và từ đó chọn cách
tiếp tục.
Lượt xem không giới hạn về mặt thẩm mỹ và chức năng. Tuy nhiên những hạn chế về mặt vật lý như kích thước,
và khả năng tăng tốc phần cứng (hoặc thiếu) có thể ảnh hưởng đến cách quản lý các thành phần đồ họa.
Machine Translated by Google
Giao diện người dùng Android về mặt khái niệm tương tự như một trang HTML thông thường
Theo cách tương tự như tương tác trên trang web, khi người dùng Android chạm vào màn hình, bộ điều khiển sẽ diễn
giải thông tin đầu vào và xác định phần cụ thể nào của màn hình cũng như các cử chỉ có liên quan.
Dựa trên thông tin này, nó cho mô hình biết về sự tương tác theo cách mà "trình nghe gọi lại" hoặc trạng thái
vòng đời thích hợp có thể được đưa vào hoạt động.
Không giống như ứng dụng web (làm mới các trang của nó sau khi có yêu cầu rõ ràng từ người dùng), dịch vụ nền
Android không đồng bộ có thể lặng lẽ thông báo cho bộ điều khiển về một số thay đổi trạng thái (chẳng hạn như đạt
đến tọa độ nhất định trên bản đồ) và đến lượt nó thay đổi trạng thái của chế độ xem có thể được kích hoạt; tất cả
những điều này mà không cần sự can thiệp của người dùng.
Machine Translated by Google
Bạn có thể lấy bộ sưu tập các video hướng dẫn hàng tuần do chính những người thuyết trình thực hiện từ trang này
(truy cập vào ngày 6 tháng 9 năm 2014)
https://www.youtube.com/results?search_query=android+design+in+action
Machine Translated by Google
(Lớp XEM)
Lớp View là thành phần cơ bản nhất của Android mà từ đó các giao diện người dùng có thể được tạo ra. Nó hoạt
động như một nơi chứa các phần tử có thể hiển thị.
Chế độ xem chiếm một vùng hình chữ nhật trên màn hình và chịu trách nhiệm vẽ và xử lý sự kiện.
Widget là các lớp con của View. Chúng được sử dụng để tạo các thành phần UI tương tác như nút, hộp kiểm, nhãn,
trường văn bản, v.v.
Bố cục là các vùng chứa có cấu trúc vô hình được sử dụng để chứa các Chế độ xem khác và bố cục lồng nhau.
Machine Translated by Google
android:layout_width=“match_parent” android:layout_height=“match_parent”
android:paddingBottom=“@dimen/activity_vertical_margin” android:paddingLeft=“@dimen/activity_horizontal_margin”
android:paddingRight=“@dimen/activity_horizontal_margin” android:paddingTop=“@dimen/activity_vertical_margin”
tools:context=“csu.matos.gui_demo.MainActivity” >
android:layout_alignParentTop=“true” android:layout_centerHorizontal=“true”
android:layout_marginTop=“36dp” android:text=“@string/edit_user_name”
android:ems=“12” >
<requestFocus/>
</EditText>
android:layout_below=“@+id/editText1” android:layout_centerHorizontal=“true”
</RelativeLayout>
Machine Translated by Google
Các phần tử bên trong có thể là các tiện ích cơ bản hoặc bố cục lồng nhau do người dùng xác định chứa các nhóm xem
riêng của chúng.
Một Hoạt động sử dụng phương thức setContentView(R.layout.xmlfilename) để hiển thị chế độ xem trên màn hình của
thiết bị.
xmlns:android=“http://schemas.android.com/apk/res/android” android:layout_width=
</LinearLayout>
Machine Translated by Google
khi làm việc với TextView, bạn đặt màu nền, văn bản, phông chữ,
căn chỉnh, kích thước, phần đệm, lề, v.v.
Thiết lập trình nghe: Ví dụ: một hình ảnh có thể được lập trình để phản hồi các sự kiện khác nhau như: nhấp
chuột, nhấn lâu, di chuột qua, v.v.
Đặt tiêu điểm: Để đặt tiêu điểm vào một chế độ xem cụ thể, bạn gọi phương thức .requestFocus() hoặc sử dụng thẻ XML
<requestFocus />
Đặt mức độ hiển thị: Bạn có thể ẩn hoặc hiển thị chế độ xem bằng cách sử dụng setVisibility(…)
hoặc bố trí theo chiều dọc. tương đối với nhau. hàng và cột.
Machine Translated by Google
DatePicke là một tiện ích cho phép chọn mẫu Bao gồm nhiều tiện ích biểu mẫu khác nhau, như nút hình ảnh, Chế độ xem danh sách
tháng, ngày và năm trường văn bản, hộp kiểm và nút radio. Chế độ xem hiển thị các mục trong danh sách cuộn theo chiều
https://developer.android.com/guide/topics/ui/declaring-layout#CommonLayouts
Machine Translated by Google
Trình
nguyên
GUI
Bảng màu
WYSIWYG
màn hình
Machine Translated by Google
Android Studio. Dựa trên IDE IntelliJ IDEA. Chức năng tương đương với
Nhật với Plugin ADT.
thực http://developer.android.com/sdk/installing/studio.html
SDK Android. Bàn làm việc được sắp xếp hợp lý dựa trên Eclipse+ADT trong một
ĐẾN
cài đặt đơn giản hơn http://developer.android.com/sdk/ bưu kiện.
index.html
DroidDraw Thiết kế GUI rất đơn giản, chưa hoàn chỉnh, chưa được tích hợp vào
IDE Eclipse đã lỗi thời! http://www.droiddraw.org/
App Inventor (có tính giáo dục, rất hứa hẹn & đầy tham vọng, 'ẩn mình'
mã hóa…) http://appinventor.mit.edu/
BỐ CỤC
Bố cục GUI của Android là các vùng chứa có cấu trúc được xác định trước
và chính sách vị trí như tương đối, tuyến tính ngang, dạng lưới, v.v.
Bố cục có thể được lồng vào nhau, do đó, một ô, hàng hoặc cột của một ô nhất định
bố cục có thể là một bố cục khác.
Machine Translated by Google
Nó hữu ích như một thùng chứa ngoài cùng chứa một cửa sổ.
Cho phép bạn xác định mức độ sử dụng của màn hình (chiều cao, chiều rộng).
Tất cả các phần tử con của nó được căn chỉnh ở góc trên cùng bên trái của màn hình
Machine Translated by Google
Nếu bố cục có hướng dọc, các hàng mới sẽ được đặt chồng lên nhau.
chiều
TIỆN ÍCH VÀ BỐ CỤC
theo
dọc
(LinearLayout – thiết lập
thuộc tính)
trọng lượng, 1 , 2 , …N )
Đôi khi, bạn có thể muốn tiện ích của mình được phân bổ không gian cụ thể (chiều cao, chiều rộng) ngay cả khi không có văn
bản nào được cung cấp ban đầu (như trường hợp hộp văn bản trống được hiển thị bên dưới).
kích thước tự nhiên
Tất cả các tiện ích bên trong LinearLayout bao gồm các thuộc tính 'width' và 'height':
android:layout_width
android:layout_height
Các giá trị được sử dụng để xác định chiều cao và chiều
rộng có thể là: Kích thước cụ thể chẳng hạn như 125dp (nhúng pixel độc
lập với thiết bị) quấn_content cho biết tiện ích chỉ nên lấp đầy không
320 x 480 dpi
gian tự nhiên của nó. match_parent (trước đây gọi là 'fill_parent') cho biết tiện ích muốn lớn bằng tiện ích gốc kèm theo.
Mã số:
<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android” android:id=“@+id/myLinearLayout”
android:layout_width=“match_parent” android:layout_height=“match_parent” android: nền=“#ff0033cc” android:orientation=“vertical”
android:padding=“6dp”>
<TextView android:id=“@+id/labelUserName” android:layout_width=“match_parent” android:layout_height=“wrap_content” android: nền = “#ffff0066”
android:text=“ Tên người dùng” android:textColor=“#ff000000” android:textSize=“16sp” android:textStyle=“bold”/>
<EditText android:id=“@+id/ediName” android:layout_width=“match_parent” android:layout_height=“wrap_content” android:textSize=“18sp” />
<Button android:id=“@+id/btnGo” android:layout_width=“125dp” android:layout_height=“wrap_content” android:text=“Go” android:textStyle=“bold”/>
</LinearLayout>
Machine Translated by Google
Không gian thừa còn lại chưa được xác nhận trong bố cục có thể là
được gán cho bất kỳ thành phần bên trong nào của nó bằng cách thiết lập
Thuộc tính trọng lượng. Sử dụng 0 nếu chế độ xem không nên
kéo dài. Trọng lượng càng lớn thì càng lớn
không gian màn hình Ví dụ: đặc tả XML cho cửa sổ này tương tự
đến ví dụ trước.
Các điều khiển TextView và Button có thêm
Trọng lực được sử dụng để cho biết cách điều khiển sẽ căn chỉnh
trên màn hình.
Theo mặc định, các tiện ích được căn trái và căn trên cùng.
Nút có quyền
bố cục_trọng lực
Machine Translated by Google
Lề trong là khoảng trống thừa giữa đường viền của “ô” của tiện ích và nội dung tiện ích thực tế.
Sử dụng
Tiện ích-1
Lề trên
Tiện ích-2
Đệm đáy
Lề dưới
Machine Translated by Google
đệm)
android:id=“@+id/ediName”
android:layout_width= “match_parent”
android:layout_height= “wrap_content”
android:textSize=“18sp”
android:padding=“30dp”/>
...
Machine Translated by Google
(LinearLayout - Đặt lề
Các widget –theo mặc định– được hiển thị chặt chẽ
cạnh nhau.
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:textSize=“18sp”
android:layout_margin=“6dp”>
</EditText>
...
Machine Translated by Google
MỘT Ví dụ:
A ở trên cùng của cha mẹ
C ở dưới A, ở bên phải
B C B ở dưới A, bên trái C
Machine Translated by Google
android:layout_alignParentTop
android:layout_alignParentBottom
android:layout_alignParentLeft
android:layout_alignParentRight
android:layout_centerInParent
android:layout_centerVertical
android:layout_centerHorizontal
Machine Translated by Google
chiều rộng1
android:layout_alignLeft=“@+id/wid1”
rộng2
chiều rộng1
android:layout_alignRight=“@+id/wid1” rộng2
Machine Translated by Google
(RelativeLayout - Tham
khảo các widget khác)
<Nút android:id=“@+id/wid2”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_alignBottom=“@+id/wid1”
android:layout_alignRight=“@+id/wid1”
android:layout_marginBottom=“36dp”
android:text=“@string/wid2”/>
Machine Translated by Google
nhận dạng (thuộc tính android:id) trên tất cả các thành phần mà bạn sẽ đề cập đến. Các
phần tử XML được đặt tên bằng cách sử dụng @+id/... Ví dụ: một EditText có thể được gọi: android:id=“@+id/
txtUserName” Chỉ phải đề cập đến các tiện ích đã được xác định. Ví dụ: một điều khiển mới được đặt bên dưới txtUserName
EditText có thể tham chiếu đến nó bằng cách sử dụng android:layout_below=“@+id/txtUserName”
<RelativeLayout <EditText android:id=“@+id/txtUserName” android:layout_width=“match_parent”
xmlns:android=“http://schemas.android.com/apk/res/android” android:layout_height=“wrap_content” android:layout_alignParentLeft=“true”
android:id=“@+id/myRelativeLayout” android:layout_width=“match_parent” android:layout_below=“@+id/lblUserName” android:padding=“ 20dp”/>
android:layout_height=“match_parent” android: nền=“#ff000099” > <Chế độ <Button android:id=“@+id/btnGo” android:layout_width=“wrap_content”
xem văn bản android:layout_height=“wrap_content”
android:id=“@+id/lblUserName” android:layout_width=“match_parent” android:layout_alignRight=“ @+id/txtUserName”
android:layout_height=“wrap_content” android:layout_alignParentLeft=“true” android:layout_below=“@+id/txtUserName”
android:layout_alignParentTop=“true” android:background=“#ffff0066” android:text= “Đi” android:textStyle=“bold”/> android:text=“
Tên người dùng” android:textColor=“#ff000000” android:textStyle=“bold”/> <Button android:id=“@+id/btnCancel” android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_below=“@+id/txtUserName”
android:layout_toLeftOf=“@+id/btnGo”
android :text=“Hủy” android:textStyle=“đậm”/>
</RelativeLayout>
Machine Translated by Google
Giống như ma trận 2D, các ô trong lưới được xác định theo hàng và cột.
Các cột rất linh hoạt, chúng có thể co lại hoặc giãn ra để chứa nội dung của chúng.
Phần tử TableRow được sử dụng để xác định một hàng mới trong đó các widget có thể được phân bổ.
Số lượng cột trong TableRow được xác định bằng tổng số tiện ích cạnh nhau được đặt trên hàng.
Machine Translated by Google
0 1
0 1 2
0 1 2 3
Machine Translated by Google
(TableLayout – ví dụ)
Màn hình hiển thị nhiều món khác nhau trong thực đơn nhà hàng
McDonald's [*]. TableLayout có 4 TableRows, với 3 cột ở hàng đầu
tiên (nhãn) và 4 ô ở mỗi hàng trong số 3 hàng còn lại (mặt hàng,
Calo, Giá và nút Mua)
<TableLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:id=“@+id/myTableLayout” android:layout_width=“match_parent”
android:layout_height=“match_parent” android:orientation=“vertical” android:padding=“6dp”>
<Dòng bảng>
[*] Tham khảo: Các trang được truy cập vào ngày 8 tháng 9 năm 2014
Machine Translated by Google
Thuộc tính android:layout_span cho biết số lượng cột mà tiện ích được phép mở rộng.
<Dòng bảng>
Ví dụ 4:
Bảng dưới đây có 4 cột (chỉ số: 0,1,2,3).
Văn bản chỉnh sửa ở bên phải nhãn sử dụng thuộc tính bố cục_span để được đặt vào một tập hợp kéo dài gồm ba
cột (cột 1 đến 3).
android:layout_span=“3”
(ISBN)
android:layout_column=“2”
Machine Translated by Google
Một cái bàn không nhất thiết phải chiếm hết không gian theo chiều ngang có sẵn.
Nếu bạn muốn bảng khớp (theo chiều ngang) với vùng chứa của nó, hãy sử dụng thuộc tính:
android:stretchColumns=“cột”
Trong đó '(các) cột' là chỉ mục cột (hoặc chỉ mục cột được phân tách bằng dấu phẩy) được kéo dài để chiếm bất kỳ khoảng
trống nào còn trống trên hàng. Ví dụ: để kéo dài cột 0 và 2 của bảng bạn đặt
android:stretchColumns=“0,2”
Machine Translated by Google
...
myTableLayout” android:layout_width=
Màn hình hiển thị trước và sau khi sử dụng mệnh đề android:stretchColumns
Machine Translated by Google
chỉ báo
android:id=“@+id/myVerticalScrollView1” android:layout_width=“match_parent”
android:layout_height=“match_parent”>
</LinearLayout>
</ScrollView>
Machine Translated by Google
Bố cục HorizontalScrollView:
<HorizontalScrollView xmlns:android=“http://schemas.android.com/apk/res/android”
android:id=“@+id/myVerticalScrollView1” android:layout_width=“match_parent”
android:layout_height=“match_parent”>
</LinearLayout>
</HorizontalScrollView>
Machine Translated by Google
Bố cục XLM
<xml….
. . .
// Lớp công
. . .
...
https://www.iconfinder.com/icons/1994645/extention_flow_pipe_water_icon
Machine Translated by Google
setContentView(R.layout.activity_main);
<TextView android:text=“ Màn hình đăng nhập
edtUserName = (EditText) findViewById(R.id.edtUserName); btnGo
ACME” ... /> <EditText android:id=“@+id/ = (Nút) findViewById(R.id.btnGo);
...
edtUserName” ... /> <Button
}
android:id=“@+id/btnGo” ... /> </LinearLayout> ...
}
Machine Translated by Google
Giả sử giao diện người dùng trong res/layout/activity_main.xml đã được tạo. Ứng dụng có thể gọi bố cục này bằng cách sử
dụng câu lệnh: setContentView(R.layout.activity_main);
Các tiện ích được xác định XML riêng lẻ, chẳng hạn như btnGo sau này được liên kết với ứng dụng Java bằng cách sử dụng câu
lệnh findViewByID(...) như trong: Button btnGo = (Button) findViewById(R.id.btnGo);
Trong đó R là lớp được tạo tự động để theo dõi các tài nguyên có sẵn cho ứng dụng. Cụ thể R.id... là tập hợp các tiện ích
được xác định trong bố cục XML (Sử dụng Package Explorer của Eclipse, xem nội dung /gen/package/R.java của bạn).
Đề xuất: Mã nhận dạng của tiện ích được sử dụng trong bố cục XML và mã Java có thể giống nhau. Thật thuận tiện khi thêm
tiền tố vào mỗi mã định danh để chỉ ra bản chất của nó. Một số tùy chọn là txt, btn, edt, rad, chk, v.v.
Hãy cố gắng nhất quán.
Machine Translated by Google
Hãy xem xét màn hình bên phải. Để làm cho tiện
ích nút 'Đi' phản hồi nhanh khi người dùng nhấn
nút đó, chúng tôi có thể thêm trình xử lý cho sự
kiện nhấp chuột.
@Ghi đè
public void onClick(View v) { //
});
Lưu ý: Các 'người nghe' thông thường khác theo dõi các sự kiện như: thay đổi văn bản, nhấn, nhấn và giữ, chọn, lấy nét, v.v.
Machine Translated by Google
Trong Android nhãn hoặc hộp văn bản được gọi là TextView.
TextView thường được sử dụng để hiển thị chú thích hoặc tin nhắn văn bản.
TextView không thể chỉnh sửa được nên không cần dữ liệu đầu vào.
Văn bản được hiển thị có thể bao gồm ký tự định dạng \n (dòng mới)
Bạn cũng có thể sử dụng định dạng HTML bằng cách đặt văn bản thành:
Html.fromHtml(“<b>bold</b> string”)
Machine Translated by Google
<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:layout_width=“match_parent” android:layout_height=“match_parent”
android:orientation=“vertical” android:padding=“6dp”>
<TextView android:id=“@+id/textView1” android:layout_width=“match_parent”
android:layout_height=“wrap_content” android:background=“@color/holo_blue_bright”
android:text=“(Lời bài hát) 99 chai bia” android:textAppearance=“?android:attr/textAppearanceLarge”/>
<TextView android:id=“@+id/textView2” android:layout_width=“match_parent”
android:layout_height=“wrap_content” android:layout_marginTop=“6dp” android:background=“@color/gray_light” android:text=“\n\t99 chai bia
trên tường, 99 chai bia. Lấy một cái xuống và vượt qua nó xung quanh, 98
”
chai bia trên tường.\n\n\t98 chai bia trên tường, 98 chai bia. Lấy một cái xuống và chuyền vòng quanh, 97 chai bia trên tường. \n\n\t97 chai bia trên tường, 97 chai bia.Lấy một chai xuống và
Nút là một lớp con của TextView. Do đó, việc định dạng bề mặt của nút cũng giống như cài đặt của TextView.
Bạn có thể thay đổi hành vi mặc định của một nút bằng cách cung cấp thông số kỹ thuật drawable.xml tùy chỉnh để áp
dụng làm nền. Trong các thông số kỹ thuật đó, bạn chỉ ra hình dạng, màu sắc, đường viền, góc, độ dốc và hành vi dựa
trên các trạng thái (được nhấn, lấy tiêu điểm). Thông tin thêm về vấn đề này trong phần phụ lục.
<Button android:id=“@+id/btnClickMeNow”
android:layout_width=“120dp” android:layout_height= “wrap_content”
android:layout_graveity=“center” android:layout_marginTop=“5dp”
android:rabity=“center” android: đệm=“5dp”
android:text=“Nhấp vào tôi ngay!” android:textColor=“#ffff0000”
android:textSize=“20sp” android:textStyle=“bold”/>
Machine Translated by Google
btnBegin.setOnClickListener(cái này);
btnExit.setOnClickListener(cái này);
}//onTạo
@Ghi đè
}
Machine Translated by Google
(ImageView và ImageButton)
ImageView và ImageButton cho phép nhúng hình ảnh vào ứng dụng của bạn (gif, jpg, png, v.v.).
Mỗi tiện ích có một thuộc tính android:src hoặc android:background (trong bố cục XML) để chỉ định hình ảnh nào
sẽ sử dụng.
Hình ảnh được lưu trữ ở dạng “res/drawable” (phiên bản độ phân giải trung bình, cao, x-high, xx-high và xxx-
high tương ứng của cùng một hình ảnh có thể được lưu trữ để sử dụng sau này với các loại màn hình khác nhau).
<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:layout_width=“match_parent” android:layout_height=“match_parent”
android:padding=“6dp” android:orientation=“vertical”>
<ImageButton android:id=“@+id/imgButton1”
android:layout_width=“wrap_content” android:layout_height=“wrap_content”
android:src=“@drawable/ic_launcher”/>
<ImageView android:id=“@+id/imgView1”
android:layout_width=“200dp” android:layout_height=“150dp”
android:scaleType=“fitXY” android:src=“@drawable/flowers1”/>
</LinearLayout>
. . .
<Nút
android:layout_width= “wrap_content”
android:layout_height= “wrap_content”
android:drawableLeft=“@drawable/ic_launcher”
android:rabity= “left|center_vertical”
android:padding=“15dp”
android:text=“Nhấp vào tôi”/>
</LinearLayout>
Machine Translated by Google
GỢI Ý: Một số trang web cho phép bạn chuyển đổi miễn phí ảnh của mình thành tập tin hình ảnh dưới nhiều định dạng khác nhau.
Vàvậy hãy thử:
kích thước định dạng như BẰNG png, .jpg, .gif, vân vân. Vì ví dụ
http://www.prodraw.net/favicon/index.php
https://material.io/design/iconography/
Machine Translated by Google
(Hộp EditText)
Tiện ích EditText là phần mở rộng của TextView cho phép
người dùng nhập dữ liệu.
Ngoài văn bản thuần túy, tiện ích này có thể hiển thị văn
bản có thể chỉnh sửa được định dạng bằng các kiểu HTML như
in đậm, in nghiêng, gạch chân, v.v.). Việc này được thực
hiện bằng Html.fromHtml(html_text)
Việc đặt hộp EditText để chấp nhận một lựa chọn dữ liệu cụ thể -
type, được thực hiện thông qua mệnh đề XML
android:inputType=“lựa chọn”, trong đó các lựa chọn bao gồm bất kỳ
các giá trị duy nhất được hiển thị trong hình. Bạn có thể kết hợp
các loại, ví dụ: textCapWords|textAutoCorreg Chấp nhận
văn bản viết hoa mọi từ, những từ không chính xác là
tự động thay đổi (ví dụ 'the' được chuyển đổi thành
'cái', v.v.)
Machine Translated by Google
Cài đặt
văn bản
Gợi ý Viết hoa
&chính tả
Vô hiệu hóa
cái nút
Tóm tắt
VÀI VÍ DỤ
MỘT SỐ VÍ DỤ (Bố
cục màn hình đăng nhập - res/values/strings.xml)
<string name=“app_name”>GuiDemo</string>
<string name=“action_settings”>Cài đặt</string>
<string name=“login”>đăng nhập</
string> <string name=“ACME_Login_Screen”> Màn hình đăng nhập
ACME </string> <string name=“Enter_your_First_and_Last_name”>Nhập họ và tên của bạn</
string> </resources>
Machine Translated by Google
VÀI VÍ DỤ
“
else Toast.makeText(getApplicationContext(), tên người không phải là NGƯỜI DÙNG hợp lệ”, Toast.LENGTH_SHORT).show();
dùng
+ } });// onClick }// onCreate
…
Machine Translated by Google
Một màn hình có thể bao gồm bất kỳ số lượng Hộp kiểm bao gồm lẫn
nhau (độc lập) nào. Bất cứ lúc nào, có thể chọn nhiều Hộp kiểm
trong GUI.
Trong ví dụ “CaféApp” của chúng tôi, màn hình bên phải hiển thị
hai điều khiển CheckBox, chúng được sử dụng để chọn các tùy chọn
'Kem' và 'Đường'. Trong hình ảnh này, cả hai hộp đều được 'chọn'.
Khi người dùng nhấn nút 'Thanh toán', thông báo Toast sẽ xảy ra
sự cố lặp lại sự kết hợp các lựa chọn hiện tại được giữ bởi các
hộp kiểm.
Machine Translated by Google
VÀI VÍ DỤ
(CaféApp - bố cục)
<?xml version=“1.0” mã hóa=“utf-8”?>
<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:layout_width=“match_parent” android:layout_height=“match_parent”
android:padding=“6dp” android:orientation=“vertical”>
<TextView android:id=“@+id/labelCoffee”
android:layout_width=“match_parent” android:layout_height=“wrap_content”
android:background=“#ff993300” android:text=“@string/coffee_addons”
android:textColor=“ @android:màu/trắng” android:textStyle=“đậm” />
<CheckBox android:id=“@+id/chkCream”
android:layout_width=“wrap_content” android:layout_height=“wrap_content”
android:text=“@string/cream” android:textStyle=“bold” />
<CheckBox android:id=“@+id/chkSugar”
android:layout_width=“wrap_content” android:layout_height=“wrap_content”
android:text=“@string/sugar” android:textStyle=“bold” />
<Button android:id=“@+id/btnPay”
android:layout_width=“153dp” android:layout_height=“wrap_content”
android:text=“@string/pay” android:textStyle=“bold” />
</LinearLayout>
Machine Translated by Google
VÀI VÍ DỤ
VÀI VÍ DỤ
btnPay.setOnClickListener(new
OnClickListener()
“
{ @Override public void & kem ”;
“
onClick(View v) { String msg = & Đường";
“Coffee ”; if (chkCream.isChecked()) msg += if (chkSugar.isChecked()) msg +=
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show(); //đi ngay và tính chi phí... }//onClick }); }// onTạo
…
Machine Translated by Google
Các nút radio có liên quan về mặt logic thường được đặt cùng nhau trong một thùng
chứa RadioGroup. Vùng chứa buộc các nút radio kèm theo hoạt động như các bộ chọn
loại trừ lẫn nhau. Nghĩa là, việc chọn một nút radio sẽ bỏ chọn tất cả các nút
khác.
Các thuộc tính về mặt phông chữ, kiểu, màu sắc, v.v. được quản lý theo cách tương
Bạn có thể gọi phương thức isChecked() để xem liệu một RadioButton cụ thể có được
chọn hay thay đổi trạng thái của nó hay không bằng cách gọi hàm chuyển đổi().
Machine Translated by Google
VÀI VÍ DỤ
(CaféApp - bố cục)
Ví dụ
Chúng tôi mở rộng ví dụ
về CaféApp trước đó bằng
cách thêm điều khiển
Nhóm phát thanh
RadioGroup cho phép người
dùng chọn một loại cà
phê từ ba tùy chọn có sẵn.
VÀI VÍ DỤ
(CaféApp - bố cục)
<TextView android:id=“@+id/textView1”
android:layout_width= “match_parent” android:layout_height= “wrap_content”
android:background=“#ff993300” android:text=“@string/kind_of_coffee”
android:textColor=“ #ffffff” android:textStyle=“đậm”/>
<RadioGroup android:id=“@+id/radioGroupCoffeeType”
android:layout_width= “match_parent” android:layout_height= “wrap_content”>
<RadioButton android:id=“@+id/radDecaf”
android:layout_width= “wrap_content” android:layout_height= “wrap_content”
android:text=“@string/decaf”/>
<RadioButton android:id=“@+id/radExpresso”
android:layout_width= “wrap_content” android:layout_height= “wrap_content”
android:text=“@string/expresso”/>
<RadioButton android:id=“@+id/radColombian”
android:layout_width= “wrap_content” android:layout_height= “wrap_content”
android:checked=“true” android:text=“@string/Colombian”/>
</RadioGroup>
Machine Translated by Google
VÀI VÍ DỤ
(CaféApp - MainActivity)
lớp công khai MainActivity mở rộng Hoạt động {
});
}// onTạo
myButton.requestFocus()
myTextBox.isFocused()
myWidget.setEnabled()
myWidget.isEnabled()
Machine Translated by Google
Ví dụ: nếu bạn đang xác định TextView để hiển thị vị trí của trụ sở chính công ty, thì không nên sử dụng mệnh
đề như android:text=“Cleveland” (quan sát nó tạo ra chuỗi Cảnh báo [I18N] Mã hóa cứng
“Cleveland”, nên sử dụng tài nguyên @string )
Thay vào đó bạn nên áp dụng quy trình hai bước, trong đó
1. Bạn viết chuỗi ký tự –say trụ sở – trong res/values/string.xml. Nhập <string name=“trụ sở chính”>Cleveland</string>
2. Bất cứ khi nào cần chuỗi, hãy cung cấp tham chiếu đến chuỗi bằng ký hiệu @string/headquarter.
Ví dụ: trong ví dụ của chúng tôi, bạn nên nhập android:text=“@string/headquarter”
TẠI SAO?
Nếu chuỗi được sử dụng ở nhiều nơi và giá trị thực của nó thay đổi, chúng tôi chỉ cập nhật mục nhập tệp tài nguyên một
lần. Nó cũng cung cấp một số hỗ trợ cho việc quốc tế hóa - dễ dàng thay đổi chuỗi tài nguyên từ ngôn ngữ này sang ngôn
ngữ khác.
Machine Translated by Google
Công cụ này cung cấp một số tùy chọn để tạo các biểu tượng chất lượng cao và các thành phần hiển thị khác thường thấy
trong ứng dụng Android.
Trình tạo biểu tượng Máy phát điện khác Công cụ cộng đồng
Biểu tượng trình khởi chạy Trình tạo khung thiết bị Gen Trình tạo kiểu thanh hành động Android
Biểu tượng thanh và tab hành động chín bản vá đơn giản. Trình tạo màu Holo của Android
= ℎ 2 + ℎ ℎ 2/ ℎ
Ví dụ:
G1 (thiết bị cơ sở 320 480) 155,92 dpi (3,7 inch theo đường chéo)
Câu hỏi: Sự khác biệt giữa các đơn vị dp, dim và sp trong Android là gì?
dp: Điểm ảnh không phụ thuộc vào mật độ – là đơn vị trừu tượng dựa trên mật độ vật lý của màn hình. Các đơn vị này là
so với màn hình 160 dpi, do đó, một dp là một pixel trên màn hình 160 dpi. Sử dụng nó để đo bất cứ thứ gì ngoại trừ phông chữ.
sp: Pixel không phụ thuộc vào tỷ lệ – tương tự như đơn vị dp mật độ tương đối nhưng được sử dụng cho tùy chọn kích thước phông chữ.
Machine Translated by Google
https://developer.android.com/guide/practices/screens_support.html
Machine Translated by Google
Giả sử bạn thiết kế giao diện cho điện thoại G1 có 320x480 pixel (Mật độ trừu tượng là 160 – Xem
Mục nhập AVD, pixel thực tế được xác định là: [2*160] [3*160] )
Giả sử bạn muốn đặt nút 120dp ở giữa màn hình. Ở chế độ dọc, bạn có thể phân bổ 320 pixel ngang dưới dạng [ 100
+ 120 + 100]. Ở chế độ Phong cảnh, bạn có thể phân bổ 480 pixel thành [ 180 + 120 + 180].
XML sẽ là
<Nút
android:id=“@+id/button1”
android:layout_height=“wrap_content”
180 120 180
android:layout_width=“120dp”
android:layout_rabity=“center”
android:text=“@+id/go_caption”/> 480
Nếu ứng dụng được triển khai trên các thiết bị có độ phân giải cao hơn, nút vẫn được ánh xạ tới giữa màn hình.
Machine Translated by Google
Các hình dạng cơ bản bao gồm: hình chữ nhật, hình bầu dục, đường thẳng và hình tròn.
Ngoài những thay đổi trực quan, phản ứng của tiện ích đối với
tương tác của người dùng có thể được điều chỉnh cho các sự kiện
như: Đã tập trung, Đã nhấp, v.v.
Hình này hiển thị các tiện ích EditText và Button như thường được
hiển thị bởi một thiết bị chạy SDK4.3 (Ice Cream). Hai tiện ích
dưới cùng (Chế độ xem văn bản và Nút) lần lượt là phiên bản tùy
chỉnh của hai điều khiển đó.
Machine Translated by Google
tiêu chuẩn –
Hành vi tùy chỉnh – các nút chuyển sang màu xám đậm với
Hộp tùy
1. Tùy chỉnh không tập trung tùy chỉnh tập trung hiển thị
Vấn đề là màu sắc của bố cục dường như được đặt lên trên các điều khiển khác khiến chúng trông 'bị nhòe' như trong hình bên dưới (phải).
Mặc dù tẻ nhạt, nhưng có một giải pháp là xác nhận lại diện mạo của các tiện ích bị bôi bẩn bằng cách đặt rõ ràng một giá trị trong
thuộc tính XML android:background tương ứng của chúng. Hình bên trái bao gồm các phép gán rõ ràng cho nền của các tiện ích.
2
3
1. android:background=“@android:drawable/edit_text” 2.
android:background=“@android:drawable/editbox_dropdown_light_frame” 3.
android:background=“@android:drawable/btn_default”
Machine Translated by Google
android:background=“@color/holo_blue_light”
<color name=“holo_blue_light”>#ff33b5e5</color>
<color name=“holo_blue_dark”>#ff0099cc</color>
<color name=“holo_blue_bright”>#ff00ddff</color>
<color name=“gray_light”>#fff0f0f0</color>
<color name=“gray_dark”>#ff313131</color>
<color name=“gray_bright”>#ffd0d0d0</color>
</tài nguyên>
https://stackoverflow.com/questions/3769762/web-colors-in-an-android-color-xml-resource-file