package lt.neworld.spanner.sample; import android.graphics.BlurMaskFilter; import android.graphics.Color; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.Spannable; import android.text.method.LinkMovementMethod; import android.text.style.StyleSpan; import android.view.View; import android.widget.TextView; import android.widget.Toast; import lt.neworld.spanner.SpanBuilder; import lt.neworld.spanner.Spanner; import lt.neworld.spanner.Spans; import static lt.neworld.spanner.Spans.background; import static lt.neworld.spanner.Spans.blur; import static lt.neworld.spanner.Spans.bold; import static lt.neworld.spanner.Spans.boldItalic; import static lt.neworld.spanner.Spans.click; import static lt.neworld.spanner.Spans.custom; import static lt.neworld.spanner.Spans.font; import static lt.neworld.spanner.Spans.foreground; import static lt.neworld.spanner.Spans.image; import static lt.neworld.spanner.Spans.italic; import static lt.neworld.spanner.Spans.quote; import static lt.neworld.spanner.Spans.scaleSize; import static lt.neworld.spanner.Spans.sizeDP; import static lt.neworld.spanner.Spans.strikeThrough; import static lt.neworld.spanner.Spans.subscript; import static lt.neworld.spanner.Spans.superscript; import static lt.neworld.spanner.Spans.underline; import static lt.neworld.spanner.Spans.url; public class SampleJavaActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sample); TextView textView = findViewById(R.id.text); textView.setMovementMethod(new LinkMovementMethod()); View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(view.getContext(), "Clicked", Toast.LENGTH_LONG).show(); } }; Drawable drawable = getResources().getDrawable(R.drawable.ic_android_16dp); drawable.setBounds(0, 0, drawable.getIntrinsicWidth() * 2, drawable.getIntrinsicHeight() * 2); // @formatter:off Spannable spannable = new Spanner() .append("Original text\n\n") .append("Big and blurry\n", Spans.sizePX(100)) .span("blurry", blur(5.0f, BlurMaskFilter.Blur.SOLID)) .append("big in DP\n", sizeDP(30)) .append("50% of original size\n", scaleSize(0.5f)) .append("bold\n", bold()) .append("italic\n", italic()) .append("bold and italic\n", boldItalic()) .append("custom typeface\n", font("sans-serif-black")) .append("strike through\n", strikeThrough()) .append("underline\n", underline()) .append("background\n", background(Color.YELLOW)) .append("foreground\n", foreground(Color.RED)) .append("subscript\n", subscript()) .append("superscript\n", superscript()) .append("Image with custom bounds: ").append(image(drawable)).append("\n") .append("Image from resources: ").append(image(this, R.drawable.ic_android_16dp)).append("\n") .append("quite\n", quote()) .append("The quick brown fox jumps over the lazy dog\n", bold(), foreground(0xFF904f1c), Spans.quote()) .span("fox", foreground(Color.RED)) .span("dog", foreground(Color.RED)) .append("First occurrence, Second occurrence\n") .span(292,"occurrence",background(Color.GREEN)) .append("Custom\n", custom(new CustomSpan())) .append("Click here\n", click(onClickListener)) .append("http://www.android.com\n", url("http://www.android.com")) ; // @formatter:on textView.setText(spannable); } } class CustomSpan implements SpanBuilder { @Override public Object build() { return new StyleSpan(Typeface.BOLD); } }