Home

Awesome

Deprecated if using Kotlin

If you are using Kotlin on your project, use SpanK instead (you can think of it as the the newest version of this library, but is meant for Kotlin only). Is better suited for Kotlin, plus has some nice quality of life inprovements that this library doesn't include just because of how verbose it would be. Please check it out and hope you enjoy it.

SpanEZ

License Build status Download

Complete abstraction from the Spannable API. Forget about all the boiler plate code and all the [Object what][1] nonsense that you have to deal with when working with Spannable.

How to use

Let's start with the easiest example, you need just one Span in your content

public class MainActivity extends AppCompatActivity {
    private TextView sample;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sample = (TextView) findViewById(R.id.sample_text);
        SpanEZ.from(sample)                                         // 1. pass the target TextView
              .withContent(R.string.lorem_ipsum)                    // 2. pass the content
              .style(Word.findAll("ipsum dolor"), BOLD | UNDERLINE) // 3. chain styles (optional)
              .apply();                                             // 4. apply
    }
}

Now, let's go to the big leagues, you can get this and even more, and just with a couple of lines:

Alt text

public class MainActivity extends AppCompatActivity {
    private TextView sample;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sample = (TextView) findViewById(R.id.sample_text);
        SpanEZ.from(sample)
              .withContent(R.string.lorem_ipsum)
              .absoluteSize(Range.from(0, 5), 20)
              .absoluteSizeDP(Range.from(6, 10), 34)
              .exclusive()
              .backgroundColor(Word.findFirst("ipsum dolor"), R.color.colorPrimary)
              .backgroundColor(Range.from(30, 50), R.color.colorPrimaryDark)
              .foregroundColor(Range.from(45, 100), R.color.colorAccent)
              .inclusiveExclusive()
              .style(Word.findAll("ipsum"), BOLD | UNDERLINE)
              .style(Word.findFirst("ipsum"), ITALIC | STRIKETHROUGH)
              .link(Word.findFirst("ut ultricies dolor molestie eget. Aliquam scelerisque, elit sit amet faucibus tincidunt"), "http://www.google.com")
              .clickable(Word.findFirst("Mauris in lacus at nulla consectetur dapibus. Sed accumsan sapien nec nisi mattis pulvinar."), new OnSpanClickListener() {
                  @Override
                  public void onSpanClick(String spanContent) {
                      Toast.makeText(MainActivity.this, spanContent, Toast.LENGTH_SHORT).show();
                  }
              })
              .inclusive()
              .quote(Paragraph.containing("Lorem"))
              .scaleX(Range.from(60, 80), 2)
              .apply(); // Calling the apply method is the only one that MUST be done in UIThread
    }
}

Download

dependencies {
  implementation 'com.bunk3r:spanez:2.x.x'
}

License

Copyright 2017 Jorge Aguilar

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

[1]: https://developer.android.com/reference/android/text/Spannable.html#setSpan(java.lang.Object, int, int, int) [2]: https://developer.android.com/reference/android/text/Spanned.html#SPAN_INCLUSIVE_INCLUSIVE