Qual é a diferença entre the
@id/
e@+id/
?
No @+id/
símbolo de mais +
instrui a criar um novo nome de recurso e adicionar o R.java
arquivo, mas e quanto @id/
? Na documentação de ID
: ao fazer referência a um recurso Android ID
, você não precisa do símbolo de mais, mas deve adicionar o espaço para nome do pacote Android, da seguinte maneira:
android:id="@android:id/list"
Mas na imagem abaixo, o Eclipse não sugere nenhum tipo de @android:id/
.
São
@id/
e@android:id/
iguais?
android
android-xml
Vikas Patidar
fonte
fonte
Respostas:
você se refere a
Android resources
, que já está definido no sistema Android, com@android:id/..
tempo para acessar os recursos que você definiu / criou em seu projeto, você usa@id/..
Mais informações
Conforme seus esclarecimentos no bate-papo, você disse que tem um problema como este:
Bem, isso depende do contexto, quando você está usando o atributo XML de
android:id
, então você está especificando um novo ID e instruindo o analisador (ou chamá-lo de construtor) para criar uma nova entradaR.java
, portanto, você deve inclua um+
sinal.Enquanto, no outro caso,
android:layout_below="@id/myTextView"
você está se referindo a um ID que já foi criado, portanto o analisador vincula isso ao ID já criadoR.java
.Mais informações novamente
Como você disse em seu bate-papo, observe que
android:layout_below="@id/myTextView"
não reconhecerá um elemento com idmyTextView
se ele for escrito após o elemento em que ele está sendo usado.fonte
android:layout_below="@+id/myTextView"
e ENTÃO definir o próprio elemento comandroid:id="@id/myTextView"
.+
emlayout_below
bem comoandroid:id
é realmente bom, já queThe '+' means to create the symbol if it doesn't already exist
como Tanmay Mandal mencionou em seu agradável (ainda subestimado) resposta. Por esse motivo, também não há efeito de tempo de execução negativo (possivelmente um aumento incomensuravelmente pequeno no tempo de compilação ^ ^).o sinal + é um atalho para adicionar o ID à sua lista de IDs de recursos. Caso contrário, você precisará tê-los em um arquivo xml como este
fonte
<View android:id="@id/my_logo"/>
Se você não tiver o arquivo de recurso que eu defini acima, será necessário fazê-lo como<View android:id="@+id/my_logo"/>
nota: você só precisa fazer o + id uma vez portanto, se em outro arquivo de layout você fez <View android: id = "+ id / my_logo" />, não seria necessário incluir o caractere '+' na próxima vez em que usar o mesmo ID em um layout.res/drawable/
oures/layout/
oures/values/
qual será o nome desse arquivo? Se você tiver algum link útil sobre isso, poste aqui.Às vezes, você vê referências nos arquivos de layout, como:
<listview id="@+id/android:list">
e
<listview id="@android:id/list">
Qual é a diferença?
.. Fico feliz que você perguntou?
@+id/foo
significa que você está criando um ID chamado foo no espaço para nome do seu aplicativo. Você pode consultar usando@id/foo
.@android:id/foo
significa que você está se referindo a um ID definido no namespace do Android.O '+' significa criar o símbolo se ele ainda não existir. Você não precisa (e não deve usá-lo) ao fazer referência a símbolos android: porque esses já estão definidos para você pela plataforma e você não pode criar seu próprio nesse espaço de nome.
Este espaço para nome é o espaço para nome da estrutura. por exemplo, você precisa usar
@android:id/list
porque esse é o ID que a estrutura espera encontrar .. (a estrutura sabe apenas sobre os IDs no espaço para nome do Android).Completamente copiado desta fonte
fonte
Em resumo
enquanto
fonte
De: https://developer.android.com/training/basics/firstapp/building-ui.html
fonte
É muito simples:
"@ + ..." - crie um novo
"@ ..." - link existente
Fonte: https://developer.android.com/guide/topics/resources/layout-resource.html#idvalue
fonte
No Guia do desenvolvedor :
O símbolo at (
@
) no início da sequência indica que o analisador XML deve analisar e expandir o restante da sequência de ID e identificá-la como um recurso de ID. O símbolo de mais (+
) significa que este é um novo nome de recurso que deve ser criado e adicionado aos nossos recursos (noR.java
arquivo). Há vários outros recursos de ID oferecidos pela estrutura do Android. Ao fazer referência a um ID de recurso do Android, você não precisa do símbolo de mais, mas deve adicionar oandroid
espaço para nome do pacote, assim:android:id="@android:id/empty"
fonte
Há um erro no Eclipse, onde, às vezes, se você acabou de criar um novo
@+id/..
, ele não será adicionado imediatamente ao arquivo R.java, mesmo após a construção limpa do projeto. A solução é reiniciar o Eclipse.Acho que isso deve ser resolvido o mais rápido possível, porque pode (e por experiência própria) confundir alguns desenvolvedores a pensar que há algo errado com sua sintaxe, e tentar depurá-lo, mesmo que não haja realmente nada para depurar.
fonte
O Android usa alguns arquivos chamados recursos, onde os valores são armazenados para os arquivos XML.
Agora, quando você usa @ id / para um objeto XML, ele está tentando se referir a um ID que já está registrado nos arquivos de valores. Por outro lado, quando você usa @ + id / ele registra um novo ID nos arquivos de valores, conforme implícito no símbolo '+'.
Espero que isto ajude :).
fonte
@id/
e@android:id/
não é o mesmo.@id/
ID de referência no seu aplicativo,@android:id/
referenciando um item na plataforma Android.Eclipse está errado.
fonte
@id/ referencing ID in your application
Mas eclise dáError: No resource found that matches the given name (at 'id' with value '@id/my_resource_id')
quando a usamos para referir o recurso do aplicativo. Então, qual é a diferença entre o@id/
e@+id/
? Como você pode dizer que o eclipse está errado?@id/
apenas no caso deRelativeLayout
Diferença entre
@+id
e@id
é:@+id
é usado para criar um ID para uma visualização noR.java
arquivo.@id
é usado para referenciar o ID criado para a visualização no arquivo R.java.Usamos
@+id
withandroid:id=""
, mas e se o ID não for criado e o estivermos referindo antes de ser criado (referência futura).Nesse caso, usamos
@+id
para criar um ID e, ao definir a visualização, temos que referenciá-lo.Consulte o código abaixo:
No código acima, o ID para o Spinner
@+id/spinner
é criado em outra visualização e, ao definir o spinner, estamos nos referindo ao ID criado acima.Portanto, precisamos criar o ID se estiver usando a visualização antes que ela seja criada.
fonte
Diferença entre
“@+id/”
e“@id/”
no AndroidO primeiro é usado para criar o
ID
componente ui específico e o outro é usado para referenciar o componente específicofonte
Se o item de exibição executar a mesma operação, você poderá usá-lo
@+id
para cada entrada em qualquer layout, pois durante a compilação de vários,@+id/foo
oR.java
arquivo cria apenas uma enumeração. Por exemplo, se eu tiver um botão Salvar em cada página que executa a mesma operação, eu usoandroid:id="@+id/button_save"
em cada layout. O arquivo R.java possui apenas uma entrada para o botão_salvar.fonte