EditText
を持つ単純なレイアウトを作成しましたが、次の警告メッセージが表示されています。
「このテキストフィールドを指すラベルビューはありません」
検索中に this を見つけ、その警告メッセージを解決しましたが、両方の属性の違いを取得しませんでしたAndroid:id
およびAndroid:labelFor
。明確化はありますか?
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 。
labelFor
は、アクセシビリティオプションの属性です。これをラベルに割り当てると、ユーザーがフォーム上でEditText
フィールドをクリックすると、Androidは弱視ユーザー向けのTalkBack)をユーザーに伝えることができます。
id
このビューの識別子名を指定し、後でView.findViewById()
またはActivity.findViewById()
で取得します。
Android:id
は、このビューのIDを定義します。
Android:labelFor
は、別のビューのIDを参照します。
アプリに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など)、設定を忘れないでください。