Android에서 "@ id /"와 "@ + id /"의 차이점


456

@id/과의 차이점은 무엇입니까 @+id/?

@+id/더하기 기호 +지시하는 새로운 자원 이름을 생성하고에 추가 R.java파일하지만 약 @id/? 문서에서 ID: Android 자원을 참조 할 때 ID더하기 기호가 필요하지 않지만 다음과 같이 android 패키지 네임 스페이스를 추가해야합니다.

android:id="@android:id/list"

그러나 아래 이미지에서 Eclipse는 어떤 종류의 제안하지 않습니다 @android:id/.

@ / id 및 @ + / id에 대한 제안을 보여주는 이미지

인가 @id/@android:id/같은?


android docs에서 : (이것을 찾기 위해 영원히
걸었고

답변:


351

당신은 참조 Android resources로, 이미 안드로이드 시스템에 정의 된, @android:id/..당신이 정의했다고 리소스에 액세스하는 동안 / 프로젝트에서 생성, 사용@id/..

더 많은 정보

채팅의 설명에 따라 다음과 같은 문제가 있다고 말했습니다.

우리가 사용 android:id="@id/layout_item_id"하면 작동하지 않습니다. 대신 @+id/작동하므로 여기의 차이점은 무엇입니까? 그리고 그것은 내 원래의 질문이었습니다.

당신의 XML 속성을 사용할 때 글쎄, 그것은 상황에 따라 android:id다음 새 ID를 지정하고, 파서 지시 (또는 빌더 호출)에 새 항목을 만들 수있다 R.java, 따라서 당신이 가지고, 표시를 포함 +하십시오.

와 같은 다른 경우 android:layout_below="@id/myTextView"에는 이미 생성 된 ID를 참조하므로 파서는이를에서 이미 생성 된 ID에 연결 R.java합니다.

더 많은 정보 다시

채팅에서 말했듯 이 사용중인 요소 다음에 작성된 요소 인 경우 android:layout_below="@id/myTextView"id를 가진 요소를 인식하지 못합니다 myTextView.


142
"추가 정보 다시"와 관련하여 :을 사용하여 위치를 android:layout_below="@+id/myTextView"정의하고을 사용하여 요소 자체를 정의 할 수 있습니다 android:id="@id/myTextView".
caw

1
@MarcoW 그게 엄청나게 도움이되었습니다. 이 문제에 대한 해결책을 찾는 데 어려움을 겪고있었습니다 (또는 올바른 검색 항목을 작성하는 중). 나는 그것이 스스로 질문 + 답변을받을 자격이 있다고 생각합니다.
David Miler

감사합니다! 나는 같은 문제가 있었고 문서는이 주제에 대해별로 말하지 않습니다. 그러나 명백하다 : 우리가 여기서 겪고있는 문제는 빈번하지 않다.
caw

7
나는 항상 android : id 및 android : layout_below에서 @ + id /를 사용하는데 문제가 있습니까?
melanke

4
@melanke 다음 퍼팅 +layout_below뿐만 아니라으로 android:id하기 때문에, 정말 괜찮 The '+' means to create the symbol if it doesn't already existTanmay 만달 그의 좋은에서 언급 한 바와 같이 (아직 과소) 대답을. 그로 인해 부정적인 런타임 효과도 없습니다 (^^이지만 컴파일 시간이 약간 증가 할 수 있습니다).
레위

86

+ 부호는 ID를 자원 ID 목록에 추가하는 바로 가기입니다. 그렇지 않으면 다음과 같은 xml 파일에 있어야합니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="my_logo" type="id"/>
</resources>

1
@schwiz : 레이아웃에서 어떻게 사용할 수 있습니까?
Vikas Patidar

7
내가 대답에 정의한 리소스 파일이 있다고 가정하면 레이아웃에 다음과 같이 할 수 있습니다. <View android:id="@id/my_logo"/> 위에서 정의한 리소스 파일이없는 경우 <View android:id="@+id/my_logo"/> 참고 와 같이 해야합니다. + id를 한 번만 수행하면됩니다. 따라서 다른 레이아웃 파일에서 <View android : id = "+ id / my_logo"/>를 수행 한 경우 다음에 레이아웃에서 동일한 ID를 사용할 때 '+'문자를 포함 할 필요가 없습니다.
Nathan Schwermann

@schwiz : 좋아 그 유용하지만 우리는 어디에 해당 파일 넣어해야합니까 res/drawable/하거나 res/layout/또는 res/values/해당 파일의 이름이됩니다 무엇을? 이와 관련하여 유용한 링크가 있으면 여기에 게시하십시오.
Vikas Patidar

1
리소스에 대한 명명 규칙 등에 대해 알아야 할 모든 것이 있습니다. 파일을 res / values ​​/에 넣고 규칙은 파일 이름을 id로 지정하지만 원하는대로 호출 할 수 있습니다. developer.android.com/guide/topics/resources/…
Nathan Schwermann

46

때때로 레이아웃 파일에 다음과 같은 참조가 나타납니다.

<listview id="@+id/android:list">

<listview id="@android:id/list">

차이점이 뭐야?

.. ☺ 물어봐서 기쁘다

@+id/foo애플리케이션의 네임 스페이스에 foo라는 ID를 작성하고 있음을 의미합니다. 를 사용하여 참조 할 수 있습니다 @id/foo. @android:id/foo은 안드로이드 네임 스페이스에 정의 된 ID를 참조하고 있음을 의미합니다.

'+'는 심볼이 존재하지 않는 경우 심볼을 작성하는 것을 의미합니다. android : 심볼을 참조 할 때 필요하지 않으며 사용하지 않아야합니다. 이는 심볼이 플랫폼에 의해 이미 정의되어 있고 어쨌든 해당 네임 스페이스에서 자신을 만들 수 없기 때문입니다.

이 네임 스페이스는 프레임 워크의 네임 스페이스입니다. 예를 들어, @android:id/list프레임 워크가 찾을 것으로 예상되는 ID이기 때문에 사용해야합니다 . (프레임 워크는 안드로이드 네임 스페이스의 ID에 대해서만 알고 있습니다.)

소스 에서 완전히 복사


6
우와 !! CTRL + C를 완료 한 다음 CTRL + V를 완료하십시오. 원본 게시물에 대한 참조도 포함되어 기쁩니다. 그건 그렇고 블로그입니까?
Aman Alam

Button 유형의 첫 번째 레이아웃 @ + id / mybutton에 선언하면 @ id / mybutton처럼 사용 된 두 번째 레이아웃의 경우 새로운 인스턴스를 만들 필요가 없습니다. 맞아 ?
Hiren Dabhi 2016 년

39

한마디로

android:id="@+id/my_button"

+ id 더하기 부호는 Android에서 리소스에 새 ID를 추가하거나 만들도록 지시합니다.

동안

android:layout_below="@id/my_button"

이미 생성 된 ID를 참조하는 데 도움이됩니다 ..


9

+자원 유형 앞 의 더하기 부호 ( )는 자원 ID를 처음 정의 할 때만 필요합니다. 앱을 컴파일 할 때 SDK 도구는 ID 이름을 사용하여 프로젝트 R.java파일에 EditText요소 를 나타내는 새 리소스 ID를 만듭니다 . 이 방법으로 리소스 ID를 한 번 선언하면 ID에 대한 다른 참조에는 더하기 부호가 필요하지 않습니다. 더하기 부호는 새 자원 ID를 지정할 때만 필요하며 문자열이나 레이아웃과 같은 구체적인 자원에는 필요하지 않습니다. 자원 객체에 대한 자세한 내용은 사이드 박스를 참조하십시오.

보낸 사람 : https://developer.android.com/training/basics/firstapp/building-ui.html



6

로부터 개발자 가이드 :

android:id="@+id/my_button"

@문자열의 시작 부분에있는 at 기호 ( )는 XML 구문 분석기가 나머지 ID 문자열을 구문 분석하고 확장하여 ID 자원으로 식별해야 함을 나타냅니다. 더하기 기호 ( +)는 R.java파일 에서 파일에 작성하여 추가해야하는 새로운 자원 이름임을 의미합니다 . Android 프레임 워크에서 제공하는 다른 ID 자원이 많이 있습니다. Android 리소스 ID를 참조 할 때는 플러스 기호가 필요하지 않지만 다음과 android같이 패키지 네임 스페이스를 추가해야합니다 .

android:id="@android:id/empty"


4

Eclipse에 버그가있는 경우가 있습니다. 때로는 방금 new을 만든 경우 @+id/..프로젝트를 새로 빌드 한 후에도 R.java 파일에 즉시 추가되지 않습니다. 해결책은 Eclipse를 다시 시작하는 것입니다.

이것은 가능한 한 빨리 해결되어야한다고 생각합니다. 경험에 따르면 일부 개발자는 구문에 문제가 있다고 생각하고 실제로 디버깅 할 것이 없다면 디버깅하려고 시도하기 때문에 혼란스럽게 할 수 있습니다.


3
나는 안드로이드 스튜디오로 전환 결코 뒤를 돌아봤을 :) (나는 당신이 당신의 대답 쓴 시간에 아직 없었다 알고) 이유 중 하나
콘라드 Morawski

4

Android는 XML 파일에 대한 값이 저장된 리소스라고하는 일부 파일을 사용합니다.

이제 XML 객체에 @ id /를 사용하면 값 파일에 이미 등록 된 id를 참조하려고합니다. 반면 @ + id /를 사용하면 '+'기호로 암시 된대로 값 파일에 새 ID를 등록합니다.

도움이 되었기를 바랍니다 :).


4

@id/@android:id/동일하지 않습니다.

@id/애플리케이션에서 ID를 @android:id/참조하고 Android 플랫폼에서 항목을 참조합니다.

이클립스가 잘못되었습니다.


@id/ referencing ID in your application그러나 eclise는 Error: No resource found that matches the given name (at 'id' with value '@id/my_resource_id')애플리케이션 리소스를 참조하기 위해 사용할 때 제공 한다고 말합니다 . 그래서 차이 무엇 @id/@+id/? 어떻게 이클립스가 잘못되었다고 말할 수 있습니까?
Vikas Patidar

1
@android : id 제안을 표시하지 않으면 Eclipse가 잘못되었습니다. @ id / myId를 어딘가에 선언하지 않고 @ id / myId를 사용하는 경우 잘못된 것입니다. @@ id / xxx를 사용하여 모든 @ id / xxx를 응용 프로그램 어딘가에 선언해야합니다.
Olegas

설명해 주셔서 감사합니다. 나는 여기서 일식이 잘못된 것이 아니라 레이아웃 요소의 맥락에 따라 제안을 보여줍니다. @id/RelativeLayout
Vikas Patidar의

2

의 차이 @+id와는 @id것입니다 :

  • @+idR.java파일 에서보기의 ID를 작성하는 데 사용 됩니다.
  • @id R.java 파일에서보기 용으로 작성된 ID를 참조하는 데 사용됩니다.

@+id와 함께 사용 android:id=""하지만 ID가 생성되지 않고 생성되기 전에 참조하는 경우 (Forward Referencing).

이 경우, 우리는 @+idid를 생성하는데 사용하고 뷰를 정의하는 동안 그것을 참조해야합니다.

아래 코드를 참조하십시오 :

<RelativeLayout>

     <TextView
        android:id="@+id/dates"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/spinner" />

   <Spinner
     android:id="@id/spinner"
     android:layout_width="96dp"
     android:layout_height="wrap_content"
     android:layout_below="@id/dates"
     android:layout_alignParentRight="true" />

</RelativeLayout>

위의 코드에서 Spinner의 id @+id/spinner는 다른보기에서 작성되며 spinner를 정의하는 동안 위에서 작성한 id를 참조합니다.

따라서 뷰를 만들기 전에 뷰를 사용하는 경우 ID를 만들어야합니다.


1

안드로이드 “@+id/”와의 차이점“@id/”

첫 번째 ID는 특정 UI 구성 요소 를 만드는 데 사용되고 다른 하나는 특정 구성 요소를 참조하는 데 사용됩니다


1

뷰 항목이 동일한 작업을 수행하는 경우, 당신은 사용할 수 @+id있기 때문에 여러 컴파일 중에 레이아웃의 각 항목을 파일이 하나의 열거를 생성한다. 예를 들어, 동일한 작업을 수행하는 각 페이지에 저장 버튼이 있으면 각 레이아웃에서 사용 합니다. R.java 파일에는 button_save에 대한 항목이 하나만 있습니다.@+id/fooR.javaandroid:id="@+id/button_save"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.