2014-07-14 22 views
24

tôi viết một cách bố trí đơn giản mà có và EditText, nhưng nó cho thấy sau thông điệp cảnh báo,Sự khác biệt giữa android: id và android: labelFor?

“Không nhãn quan điểm trỏ đến lĩnh vực văn bản này”

Trong khi tìm kiếm tôi đã this và nó giải quyết mà tin nhắn cảnh báo là tốt. Nhưng không có sự khác biệt giữa hai thuộc tính android:idandroid:labelFor. Làm rõ!

+1

[* this *] (http://thecodeiscompiling.blogspot.com/2013/12/android-labelfor-waning-fix.html) có thể hữu ích – alfasin

+0

Bản sao có thể có của [Ý nghĩa của "Không có điểm xem nhãn nào cho điểm này trường văn bản "thông báo cảnh báo] (http://stackoverflow.com/questions/16896082/meaning-of-no-label-views-point-to-this-text-field-warning-message) – YEH

Trả lời

32

android: id

Cung cấp một tên định danh cho quan điểm này, để sau đó lấy nó với View.findViewById() hoặc Activity.findViewById(). Đây phải là tài liệu tham khảo tài nguyên ; thông thường, bạn đặt điều này bằng cách sử dụng cú pháp @ + để tạo tài nguyên ID mới. Ví dụ: android: id = "@ + id/my_id" trong đó cho phép bạn sau đó truy xuất chế độ xem với findViewById(R.id.my_id).

Phải là tham chiếu đến tài nguyên khác, ở dạng "@[+][package:]type:name" hoặc thuộc tính chủ đề trong biểu mẫu "? [Package:] [type:] name".

Điều này tương ứng với id biểu tượng tài nguyên thuộc tính chung.


android: labelFor

public static thức int labelFor

Chỉ định id của một cái nhìn mà xem này đóng vai trò như một nhãn cho khả năng tiếp cận mục đích. Ví dụ: một TextView trước một EditText trong giao diện người dùng thường chỉ định thông tin nào được chứa trong EditText. Do đó, TextView là nhãn cho EditText.

Phải là giá trị số nguyên, chẳng hạn như "100".

Đây cũng có thể là tham chiếu đến tài nguyên (theo mẫu "@ [package:] type: name") hoặc thuộc tính chủ đề (theo mẫu "? [Package:] [type:] name") chứa một giá trị thuộc loại này.

Giá trị không đổi: 16.843.718 (0x010103c6)

UPDATE:

Ví dụ -

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <LinearLayout android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:layout_width="match_parent"> 
    <TextView android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:labelFor="@+id/edit_item_name" 
    android:text="Item Name"/> 
    <EditText android:id="@+id/edit_item_name" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:hint="Item Name"/> 
    </LinearLayout> 
    </LinearLayout> 

tham khảo: android:idandroid:labelFor.

+0

trong trường hợp của tôi nó đang đưa ra cảnh báo cho EditText Field và khi tôi cập nhật thuộc tính labelFor trong EditText, cảnh báo đã đi. Ở đây bạn cập nhật cùng một thuộc tính cho TextView ... Tôi vẫn chưa rõ ràng về tham chiếu nào nên được sử dụng. – CoDe

+8

Whats lợi thế của việc thiết lập labelfor là gì? – Psypher

+2

@Psypher Mục đích trợ năng — không có điều đó, trình đọc màn hình gặp khó khăn khi biết nhãn của trường đầu vào là gì và người khiếm thị không thể "nhìn thấy" nhãn nằm cạnh một trường. – Blaisorblade

1

android:id xác định ID của chế độ xem này.

android:labelFor tham chiếu ID của chế độ xem khác.

9

labelFor là thuộc tính cho các tùy chọn trợ năng. Bạn chỉ định điều này cho một nhãn để nếu, trên biểu mẫu, người dùng nhấp vào trường EditText, android có thể biết nội dung cần đọc (TalkBack cho người dùng có thị lực kém) cho người dùng.

id Cung cấp tên số nhận dạng cho chế độ xem này, để sau đó truy xuất tên bằng View.findViewById() hoặc Activity.findViewById().

+0

để khớp với hỗ trợ của nó trường nhãn, như Tên (nhãn) đối với trường nhập của nó. – CoDe

0

ngoài tất cả các câu trả lời nếu u không sử dụng file xml cho các ứng dụng này là một giải thích ngắn gọn những gì cho phục vụ XEM ID:

(btw theo ý kiến ​​của tôi sử dụng xml sucks - chỉ tập tin xml của tôi là manifest: D được tạo ra bởi gradle)

@IdRes - chú thích cho id nguồn

/** define resource id for view */ 
@IdRes 
int TEXT_VIEW_ID = "111111"; 

/** create edit tex in code */ 
EditText myTextView = new EditText(Context); 
/** set view id */ 
myTextView.setID(TEXT_VIEW_ID); 
/** set layout params etc then attach or inflate as u wish to view hierarchy */  

/** use view id to find view */ 
EditText etFound = (EditText) View.findViewById(TEXT_VIEW_ID); 

ps. ID là bắt buộc để duy trì trạng thái của chế độ xem phân cấp khi Activity.onSaveInstanceState (Bundle) được sử dụng - vì vậy nếu u tạo trong mã (VIEW/WIDGET/LAYOUT vv) đừng quên thiết lập nó.

Các vấn đề liên quan