Oto przykład app
przestrzeni nazw, którą widziałem z res/menu/main.xml
pliku
<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>
Czemu app
służy przestrzeń nazw? Czy jest to „standardowa” przestrzeń nazw XML systemu Android? Czy te same opcje wartości są dostępne dla tego samego atrybutu umieszczonego w dwóch różnych przestrzeniach nazw (np. app:showAsAction
I android:showAsAction
).
Z dokumentów :
android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
tj. czy linia w powyższym przykładzie oznaczałaby coś innego, gdyby zamiast tego atrybut był:
android:showAsAction="never"
Wygląda na to, że może to być jakiś mechanizm „podklasy”, ale nie mogę znaleźć żadnej prawdziwej dokumentacji dotyczącej app
przestrzeni nazw ze źródeł Google / Android.
showAsAction
w niestandardowej przestrzeni nazw oznacza, że działa zgodnie z oczekiwaniami na nowszych platformach i jest ignorowane na starszych?android:
wersji.showAsName
atrybut nie jest obsługiwana w starszej biblioteki, w jaki sposób za pomocą niestandardowych nazw pozwalają platforma znać zakres opcji możliwa wartość (ifRoom
,never
etc.), i wiedzieć, jak interpretować te opcje? Zakładam, że „atrybuty, które nie istnieją” oznacza atrybuty, dla których nie ma implementacji w bibliotece. Zamianaandroid:
naapp:
raczej nie wydaje się kompletnym obejściem. Czy coś mi brakuje?app:showAsName
) i wszystkie jego możliwe wartości są uwzględniane w aplikacji po dołączeniuappcompat-v7
biblioteki (która definiuje ją wattrs.xml
pliku). 2) Biblioteka AppCompat (w szczególności ActionMenuView, która jest używana automatycznie podczas używaniaActionBarActivity
) analizuje i używaapp:showAsAction
do prawidłowego wyświetlania elementów w ten sam sposób na wszystkich poziomach API. Z pewnością wymaga współdziałania XML i kodu.Możesz uzyskać wyjaśnienie z tego linku
Przestrzeń nazw XML
źródło