Stylowe używanie przestrzeni nazw aplikacji

103

Podam przykład, aby zademonstrować większy punkt.

Wyobraź sobie, że moja aplikacja ma wiele FloatingActionButtons. W związku z tym chcę stworzyć jeden styl i użyć go ponownie. Więc robię co następuje:

<style name="FabStyle” parent ="Widget.Design.FloatingActionButton">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_margin">16dp</item>
    <item name="app:backgroundTint">@color/accent</item>
    <item name="app:layout_anchorGravity">end|bottom</item>
</style>

Problem, który mam, polega na tym, że kod nie kompiluje się, ponieważ narzeka

Error:(40, 5) No resource found that matches the given name: attr 'app:backgroundTint'.

Próbowałem wprowadzić przestrzeń nazw przez resourcestag, ale to nie działa

<resources
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    >

Jakieś pomysły, jak mogę to uruchomić?

Nouvel Travay
źródło
1
Związane z: stackoverflow.com/questions/6860886/ ...
styler1972

Odpowiedzi:

229

W przypadku appprzestrzeni nazw nie musisz określać app:<property name>. Po prostu <property name>wystarczy.

Na przykład

<style name="FabStyle" parent="Widget.Design.FloatingActionButton"> 
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_margin">16dp</item>
    <item name="backgroundTint">@color/accent</item>
    <item name="layout_anchorGravity">end|bottom</item>
</style>

A ponieważ layout_anchorGravitymusisz ustawić to w pliku XML, w którym definiujesz pływający przycisk akcji.

dex
źródło
Niesamowite! dzięki za pomoc. Niewielka poprawka: możesz zdefiniować również layout_anchorGravityna stronie stylu. Działa jako<item name="layout_anchorGravity">end|bottom</item>
Nouvel Travay
uratowałeś dzień! A ten, który należy zdefiniować lokalnie, to layout_anchor. +1!
Nouvel Travay,