2012-06-22 71 views
19

Tôi vừa mới bắt đầu sử dụng android và có khoảng 5 tệp bố cục đã hoàn tất. Tuy nhiên, tôi chỉ nhận ra rằng tôi đã sử dụng @id và @ + id thay thế cho nhau, nhưng tôi không chắc chắn sự khác biệt chính xác giữa hai là gì.Sự khác nhau giữa @id và @ + id là gì?

Trả lời

37

Bạn cần sử dụng @+id khi bạn xác định Id của riêng bạn cho Chế độ xem.

Chính xác từ docs:

Các at-biểu tượng (@) ở đầu của chuỗi chỉ ra rằng phân tích cú pháp XML nên phân tích và mở rộng phần còn lại của chuỗi ID và xác định nó như là một tài nguyên ID. Dấu cộng (+) có nghĩa rằng đây là tên tài nguyên mới phải được tạo và thêm vào tài nguyên của chúng tôi (trong tệp R.java). Có một số tài nguyên ID khác mà được cung cấp bởi khung công tác Android. Khi tham chiếu ID tài nguyên Android , bạn không cần dấu cộng, nhưng phải thêm không gian tên gói android .

Và bây giờ tôi thêm cho bạn ví dụ thực tế:

<Button 
    android:id="@+id/start" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
/> 

<Button 
    android:id="@+id/check" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/start" 
/> 

Vì vậy, ở đây, bạn đã tạo hai IDs, bắt đầu và kiểm tra. Sau đó, trong ứng dụng của bạn, bạn có thể kết nối với chúng với findViewById(R.id.start).

android:layout_below="@id/start" này đề cập đến hiện id.start và có nghĩa là Button của bạn với id séc sẽ được bố trí bên dưới Button với id bắt đầu.

+0

Ok cảm ơn bạn, điều này có nghĩa là tôi có thể sử dụng id @ + bất cứ khi nào tôi muốn không có sự cố? – JuiCe

+0

có, khi bạn muốn tạo id duy nhất mới, chỉ cần sử dụng @ + id như là có nghĩa là của tài liệu. – Sajmon

+1

@Sajmon sẽ tạo ra sự cố khi tôi sử dụng android: layout_below = "@ + id/start" thay vì android: layout_below = "@ id/start". Hoặc nó có thể tạo ra vấn đề sau một thời gian dài? – Bora

0

android: id = "@ + id/my_button"

+ id Thêm hát nói android để thêm hoặc tạo ra một id mới trong Tài nguyên.

android: layout_below = "@ id/my_button"

nó chỉ giúp để tham khảo id đã tạo ra ..

1

Đôi khi bạn phải sử dụng + dấu. Ví dụ. khi bạn sử dụng <include ... /> và tập tin bao gồm trông như thế này:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.FloatingActionButton xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    (...) 
    app:layout_anchor="@+id/view_pager" 
    app:layout_anchorGravity="top|right|end" 
/> 

Nếu bạn không thêm + trong "@+id/view_pager" bạn sẽ nhận được lỗi trong khi xây dựng dự án:

Error:(9, 24) No resource found that matches the given name (at 'layout_anchor' with value '@id/view_pager'). 

Nó happend với tôi tôi trong dự án với thư viện.

0

Để truy cập một tiện ích (hoặc thành phần) trong Java hoặc để làm cho người khác phụ thuộc vào nó, chúng ta cần một giá trị duy nhất để đại diện cho nó. Giá trị duy nhất đó được cung cấp bởi thuộc tính android: id, về cơ bản, thêm id được cung cấp dưới dạng hậu tố cho @ + id/vào tệp tài nguyên id cho người khác truy vấn.Một id cho Toolbar có thể được định nghĩa như thế này,

android:id=”@+id/toolbar 

id sau bây giờ có thể được theo dõi bởi findViewById (...) mà sẽ tìm kiếm nó trong res nộp đơn xin id, hoặc đơn giản là R.id thư mục và trả về kiểu của Chế độ xem được đề cập. Cách khác, @id, hoạt động giống như findViewById (…) - tìm kiếm thành phần theo id được cung cấp nhưng chỉ dành riêng cho bố cục. Việc sử dụng chung nhất của nó là đặt một thành phần liên quan đến thành phần nó trả về.

android:layout_below=”@id/toolbar” 
Các vấn đề liên quan