Layout inflater with String
as source of layout
Allows to inflate layout from remote source (e.g. backend)
Add dependency to your build.gradle
file:
dependencies {
implementation 'xyz.truenight.dynamic:inflater:1.0.2'
// for AppCompat support implementation 'xyz.truenight.dynamic:compat:1.0.2'
}
or to your pom.xml
if you're using Maven:
<dependency>
<groupId>xyz.truenight.dynamic</groupId>
<artifactId>inflater</artifactId>
<version>1.0.2</version>
<type>pom</type>
</dependency>
DynamicLayoutInflater
like LayoutInflater
uses Prototype pattern.
// creating base instance which will be accessed via ``WeakReference``
// so you need to store strong reference on object returned from create()
// use CompatDynamicLayoutInflater for AppCompat support
inflater = DynamicLayoutInflater.base(this)
.registerAttrAdapter(...)
.registerParamAdapter(...)
...
.create();
View view = DynamicLayoutInflater.from(context).inflate(resource, parent);
inflater = DynamicLayoutInflater.base(this)
.registerAttrAdapter(ImageView.class, "android:src", new AttrAdapter<ImageView>() {
@Override
public boolean apply(final ImageView view, final String value) {
if (Utils.startsWith(value, "http")) {
imageFromUrl(view, value);
// handeled
return true;
}
// not handeled, less priority adapters can try to handle this
return false;
}
})
.registerAttrAdapter(View.class, "android:background", new AttrAdapter<View>() {
@Override
public boolean apply(final View view, final String value) {
if (Utils.startsWith(value, "http")) {
backgroundFromUrl(view, value);
return true;
}
return false;
}
})
.create();