Подтвердить что ты не робот

Разница между Android: id и android: labelFor?

Я написал простой макет, который имеет EditText, но он показывает следующее предупреждающее сообщение:

Msgstr "Никакие метки не указывают на это текстовое поле"

Во время поиска я нашел это и решил это предупреждение, но не получал разницы между обоими атрибутами android:id и android:labelFor. Любые разъяснения?

4b9b3361

Ответ 1

Android: идентификатор

Поставьте имя идентификатора для этого представления, чтобы позже получить его с помощью View.findViewById() или Activity.findViewById(). Это должно быть справочник ресурсов; обычно вы устанавливаете это с помощью синтаксиса @+ создайте новые ресурсы ID. Например: android: id = "@+ id/my_id", который позволяет позже получить представление с помощью findViewById(R.id.my_id).

Должна быть ссылка на другой ресурс в форме "@[+][package:]type:name" или атрибут темы в форме "[Пакет:]? [Тип:] имя".

Это соответствует идентификатору символа ресурса глобального атрибута.


Android: labelFor

public static final int labelFor

     

Указывает идентификатор представления, для которого это представление служит ярлыком для   доступности. Например, TextView перед EditText в   пользовательский интерфейс обычно указывает, какая информация содержится в EditText.   Следовательно, TextView является меткой для EditText.

     

Должно быть целочисленное значение, например "100".

     

Это также может быть ссылка на ресурс (в форме    "@[package:] type: name" ) или атрибут темы (в форме    "? [package:] [type:] name" ), содержащий значение этого типа.

     

Постоянное значение: 16843718 (0x010103c6)

UPDATE:

Например -

 <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>

Ссылка: android:id и android: labelFor.

Ответ 2

labelFor - атрибут для параметров доступности. Вы назначаете это ярлыку, чтобы, если в форме пользователь нажимает поле EditText, андроид может знать, что читать (TalkBack для пользователей с низким зрением) для пользователя.

id Поставьте имя идентификатора для этого представления, чтобы позже получить его с помощью View.findViewById() или Activity.findViewById().

Ответ 3

android:id определяет идентификатор этого представления.

android:labelFor ссылается на идентификатор другого вида.

Ответ 4

в дополнение ко всем ответам, если вы не используете xml файлы для приложений, это краткое объяснение, для чего служит VIEW ID:

(Кстати, по-моему, используя xml sucks - мой единственный XML файл является манифестным: D сгенерировано gradle)

@IdRes - аннотация для идентификатора ресурса

/** 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);

пс. Идентификатор является обязательным для сохранения состояния представления иерархии при использовании Activity.onSaveInstanceState(Bundle) - поэтому, если вы создаете код (VIEW/WIDGET/LAYOUT и т.д.), Не забудьте его установить.