Skip to content

TrueNight/Dynamic

Repository files navigation

DynamicLayoutInflater

Download Maven Central Licence

Layout inflater with String as source of layout

Overview

Allows to inflate layout from remote source (e.g. backend)

Installation

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>

Usage

Creating base instance

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();

Inflate

  View view = DynamicLayoutInflater.from(context).inflate(resource, parent);

Register AttrAdapter

  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();

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages