Android data binding - 'No resource identifier found for attribute'
Meine layout Datei:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:text="@string/hello_world"
android:layout_width="wrap_content"
app:fontName="Roboto-Regular.ttf"
android:layout_height="wrap_content"/>
</RelativeLayout>
Meine Bindung zum adapter-Methode:
public class FontBinding {
@BindingAdapter("bind:fontName")
public static void setFontName(TextView view, @NonNull String fontName) {
String fontPath = "/fonts/" + fontName;
Typeface typeface = Typeface.createFromAsset(view.getContext().getAssets(), fontPath);
view.setTypeface(typeface);
}
}
Die Fehler, die ich immer bin:
Error:(8) No resource identifier found for attribute 'fontName' in package 'com.example.databindingproject'
Folgte dem tutorial von https://developer.android.com/tools/data-binding/guide.html .
Irgendwelche Ideen was ich tun könnte falsch?
- Sind Sie versuchen, hinzufügen, um eine benutzerdefinierte schriftart-Ressource für Ihre app zu verwenden?
- Wo und wie setFontName genannt wird?
- Nicht wichtig jetzt, wenn ich versuche, eine benutzerdefinierte schriftart oder nicht. Nur wollen, um eine benutzerdefinierte Attribut über den android data binding-Mechanismus. @Angudroid - check den link aus dem post - doc sagt, die Methode wird vom system aufgerufen.
- okay, also, wenn Sie breakpoint auf "String fontPath" was ist der fontName Wert ?
- es ist eine compile-Zeit-Fehler. also keine Haltepunkte 🙂
- Neuerstellen des Projekts behoben dieser Fehler in meinem Fall
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie den data binding-syntax. Es sollte sein:
apply plugin: 'com.android.databinding'
in Ihrem app/build.gradle undclasspath "com.android.databinding:dataBinder:1.0-rc1"
in buildscripts.Abhängigkeiten in Ihrem Projekt zu bauen.gradle, richtig?DataBindingUtil.setContentView(this, R.layout.activity_main)
stattsetContentView(R.layout.activity_main)
app:fontName="@{`Roboto-Regular.ttf`}"
(mit back quotesDer gleiche Fehler kann auch passieren, wenn Sie vergessen, die schließende geschweifte Klammer:
Wenn Sie übergeben möchten dp/px Wert @BindingAdapter - denken Sie daran, wickeln Sie es mit einer verbindlichen syntax, d.h. "@{ }"
Müssen Sie dimens.xml übergeben Sie den Wert:
app:compoundDrawableSize="@{@dimen/icon_size}"
Begleitende verbindliche adapter ermöglicht Ihnen das festlegen copound drawable-Größe für eine TextView würde wie folgt Aussehen: