'Uygulama' Android XML ad alanı nedir?


164

İşte appbir res/menu/main.xmldosyadan gördüğüm ad alanının bir örneği

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >
<item android:id="@+id/action_settings"
    android:title="@string/action_settings"
    android:orderInCategory="100"
    app:showAsAction="never" />
</menu>

appAd alanı hangi amaca hizmet eder? "Standart" bir Android XML ad alanı mıdır? İki farklı ad alanına yerleştirilen aynı öznitelik için aynı değer seçenekleri var mı (ör. app:showAsActionVe android:showAsAction).

Gönderen docs : android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]

yani, yukarıdaki örnekteki satır, öznitelik yerine başka bir şey ifade eder mi:

android:showAsAction="never"

Neredeyse bir çeşit "alt sınıf" mekanizması olabilir gibi görünüyor, ancak appGoogle / Android kaynaklarından ad alanında gerçek bir belge bulamıyorum .

Yanıtlar:


213

appAd bir kütüphaneye özgü olmayan, ama olsun etkili öznitelikleri özel için tek bir global ad verme, ithal kodunuz tarafından veya kütüphaneler tarafından, uygulamanızda tanımlı tüm özellikler için kullanılır - yani android sistem tarafından tanımlanan nitelikler .

Bu durumda appcompat-v7kütüphane android:, android'in önceki sürümlerini desteklemek için ad alanı olanlarını yansıtan özel öznitelikler kullanır (örneğin: android:showAsActionyalnızca API11'de eklenmiştir, ancak app:showAsAction(uygulamanızın bir parçası olarak sağlanır) uygulamanızın yaptığı tüm API düzeylerinde çalışır) - açıkçası kullanıldığında, android:showAsActionbu özelliğin tanımlanmadığı API düzeylerinde çalışmaz.


1
Teşekkür ederim! Sonunda belgelerde bundan bahsettiğim için mutluyum. Yine de bir takip sorusu. Bağlantınızdaki işlem çubuğu dokümanları şöyle diyor: "Yukarıdaki showAsAction özniteliğinin <menu> etiketinde tanımlanan özel bir ad alanı kullandığına dikkat edin. Bu, destek kütüphanesi tarafından tanımlanan herhangi bir XML özniteliği kullanılırken gereklidir, çünkü bu öznitelikler Eski cihazlarda Android çerçevesi. Bu nedenle, destek kitaplığı tarafından tanımlanan tüm özellikler için kendi ad alanınızı önek olarak kullanmalısınız. "
coder123

1
Peki, niteliklerin çerçevede bulunmadığı eski cihazlarda ne olur? Özel bir ad alanını tanımlamanın, bir özellik için eksik destek konusunda nasıl çalıştığı henüz net değil. showAsActionÖzel bir ad alanı altında bildirmek , yeni platformlarda beklendiği gibi çalıştığı ve eski platformlarda yok sayıldığı anlamına mı geliyor?
coder123

4
Var olmayan özellikler sessizce yok sayılır. Özel bir özellik oluşturduğunuzda, özel özelliğin çalışma zamanında var olacağını garanti edersiniz (açıkçası: tanımı uygulamanıza dahil edilir). Bu nedenle, destek kitaplığı, özel menüler kullanarak yapı menüleri için özel kodlarının tüm API sürümlerinde çalışan tek bir kod yolunu kullanabilmesini sağlar android:.
ianhanniballake

2
Sadece anlamadığım için üzgünüm. Ad alanını değiştirmenin bir öznitelik için nasıl bir tanım sağladığını anlamama yardımcı olabilir misiniz? Eğer showAsNamenitelik eski kütüphanede desteklenmez, nasıl platformu olası değer seçenekleri (aralığını bilmek izin ad göndermek için özel bir yok ifRoom, nevervs.) ve bu seçenekleri nasıl yorumlanacağı biliyor? Ben "yok öznitelikleri" kütüphanede hiçbir uygulama var öznitelikleri anlamına varsayıyorum. Takas android:için app:pek komple bir çözüm gibi görünüyor. Bir şey mi kaçırıyorum?
coder123

14
Bunun iki kısmı vardır: 1) özel öznitelik ( app:showAsName) ve olası tüm değerleri , kitaplığı eklediğinizde ( dosyasında tanımlayan) uygulamanıza dahil edilir . 2) AppCompat kütüphanesi (özellikle, kullandığınızda otomatik olarak kullanılan ActionMenuView ), öğeleri tüm API seviyelerinde aynı şekilde düzgün bir şekilde göstermek için kullanır ve kullanır . Kesinlikle birlikte çalışmak için hem XML hem de kod gerektirir. appcompat-v7attrs.xmlActionBarActivityapp:showAsAction
ianhanniballake

0

Bu linkten biraz açıklama alabilirsiniz

XML ad alanı

Ad alanı bildirimi XML ad alanı, değeri geçerli bir ad alanı adı olması gereken ayrılmış xmlns veya xmlns: öneki XML özelliği kullanılarak bildirilir.

Örneğin, aşağıdaki bildirim "xhtml:" önekini XHTML ad alanıyla eşler:

xmlns: xhtml = "http://www.w3.org/1999/xhtml"

Bir ata veya yukarıdaki ad alanı bildirimine sahipse, adı "xhtml:" önekiyle başlayan herhangi bir öğe veya nitelik XHTML ad alanında kabul edilir.

Varsayılan bir ad alanı bildirmek de mümkündür. Örneğin:

xmlns = "http://www.w3.org/1999/xhtml"

Bu durumda, bir ad alanı öneki bulunmayan herhangi bir öğenin, veya varsayılan olarak yukarıda belirtilen ad alanı bildirimi varsa, XHTML ad alanında olduğu kabul edilir.

Kapsamda varsayılan ad alanı bildirimi yoksa ad alanı adının değeri yoktur. [6] Bu durumda, açık ad alanı öneki olmayan bir öğenin herhangi bir ad alanında olmadığı kabul edilir.

Öznitelikler hiçbir zaman varsayılan ad alanına tabi değildir. Açık ad alanı öneki olmayan bir özniteliğin hiçbir ad alanında olmadığı kabul edilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.