web-dev-qa-db-ja.com

Android:idとAndroid:labelForの違いは?

EditTextを持つ単純なレイアウトを作成しましたが、次の警告メッセージが表示されています。

「このテキストフィールドを指すラベルビューはありません」

検索中に this を見つけ、その警告メッセージを解決しましたが、両方の属性の違いを取得しませんでしたAndroid:idおよびAndroid:labelFor。明確化はありますか?

37
CoDe

Android:id

このビューの識別子名を指定し、後でView.findViewById()またはActivity.findViewById()で取得します。これはリソース参照である必要があります。通常、@ +構文を使用してこれを設定し、新しいIDリソースを作成します。たとえば、Android:id = "@ + id/my_id"を使用すると、後でfindViewById(R.id.my_id)を使用してビューを取得できます。

"@[+][package:]type:name"形式の別のリソース、または "?[package:] [type:] name"形式のテーマ属性への参照である必要があります。

これは、グローバル属性リソースシンボルIDに対応します。


Android:labelFor

public static final intlabelFor

このビューがアクセシビリティの目的でラベルとして機能するビューのIDを指定します。たとえば、通常、UIのEditTextの前のTextViewは、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

48
My God

labelForは、アクセシビリティオプションの属性です。これをラベルに割り当てると、ユーザーがフォーム上でEditTextフィールドをクリックすると、Androidは弱視ユーザー向けのTalkBack)をユーザーに伝えることができます。

idこのビューの識別子名を指定し、後でView.findViewById()またはActivity.findViewById()で取得します。

13
Jitender Dev

Android:idは、このビューのIDを定義します。

Android:labelForは、別のビューのIDを参照します。

2
Henry

アプリにxmlファイルを使用しない場合のすべての回答に加えて、これはビューIDを提供するものの簡単な説明です:

(ところで、私の意見では、xml sucksを使用しています-私の唯一のxmlファイルはマニフェストです:Dはgradleによって生成されました)

@IdRes-リソースIDの注釈

/** 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)を使用する場合、階層ビューの状態を保持するにはIDが必須です。したがって、コードで作成する場合(VIEW/WIDGET/LAYOUTなど)、設定を忘れないでください。

0
ceph3us