Programming

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

procodes 2020. 2. 17. 22:23
반응형

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


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

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

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

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

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

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


당신은 참조 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.


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

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

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

<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이기 때문에 사용해야합니다 . (프레임 워크는 android 네임 스페이스의 ID에 대해서만 알고 있습니다.)

소스 에서 완전히 복사


한마디로

android:id="@+id/my_button"

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

동안

android:layout_below="@id/my_button"

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


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

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


매우 간단합니다.

"@ + ..."-새로 만들기

"@ ..."-기존 링크

출처 : https://developer.android.com/guide/topics/resources/layout-resource.html#idvalue


로부터 개발자 가이드 :

android:id="@+id/my_button"

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

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


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

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


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

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

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


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

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

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


보기 항목이 동일한 작업을 수행하는 경우 여러 @ + id / foo를 컴파일하는 동안 R.java 파일은 하나의 열거 만 작성하므로 모든 레이아웃의 각 항목에 @ + id를 사용할 수 있습니다. 예를 들어 동일한 작업을 수행하는 각 페이지에 저장 버튼이 있으면 각 레이아웃에서 android : id = "@ + id / button_save"를 사용합니다. R.java 파일에는 button_save에 대한 항목이 하나만 있습니다.


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

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


의 차이 @+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를 만들어야합니다.

참고 URL : https://stackoverflow.com/questions/5025910/difference-between-id-and-id-in-android

반응형