Small DrawableSpan fix (alig_center)

This commit is contained in:
Dimitry Ivanov 2017-05-11 22:02:44 +03:00
parent 6ed978b7a2
commit 3e3a213a1b
3 changed files with 22 additions and 2 deletions

View File

@ -1,8 +1,11 @@
package ru.noties.markwon; package ru.noties.markwon;
import android.app.Activity; import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.os.SystemClock; import android.os.SystemClock;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.method.LinkMovementMethod; import android.text.method.LinkMovementMethod;
import android.widget.TextView; import android.widget.TextView;
@ -18,6 +21,7 @@ import java.util.Scanner;
import ru.noties.debug.AndroidLogDebugOutput; import ru.noties.debug.AndroidLogDebugOutput;
import ru.noties.debug.Debug; import ru.noties.debug.Debug;
import ru.noties.markwon.renderer.*; import ru.noties.markwon.renderer.*;
import ru.noties.markwon.spans.DrawableSpan;
import ru.noties.markwon.spans.DrawableSpanUtils; import ru.noties.markwon.spans.DrawableSpanUtils;
public class MainActivity extends Activity { public class MainActivity extends Activity {
@ -33,6 +37,21 @@ public class MainActivity extends Activity {
final TextView textView = (TextView) findViewById(R.id.activity_main); final TextView textView = (TextView) findViewById(R.id.activity_main);
// final Drawable drawable = getDrawable(R.mipmap.ic_launcher);
//// drawable.setBounds(0, 0, 16, 16);
// final SpannableStringBuilder builder = new SpannableStringBuilder();
// for (int i = 0; i < 10; i++) {
// builder.append("text here and icon: \u00a0");
// //noinspection WrongConstant
// builder.setSpan(new DrawableSpan(drawable, i % 3), builder.length() - 1, builder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// builder.append('\n');
// }
// textView.setText(builder);
//
// if (true) {
// return;
// }
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {

View File

@ -107,6 +107,7 @@ public class SpannableConfiguration {
// todo, change to something more reliable // todo, change to something more reliable
// todo, must mention that bullet/ordered/quote must have the same margin (or maybe we can just enforce it?) // todo, must mention that bullet/ordered/quote must have the same margin (or maybe we can just enforce it?)
// actually it does make sense to have `blockQuote` & `list` margins (if they are different)
public SpannableConfiguration build() { public SpannableConfiguration build() {
if (blockQuoteConfig == null) { if (blockQuoteConfig == null) {
blockQuoteConfig = new BlockQuoteSpan.Config( blockQuoteConfig = new BlockQuoteSpan.Config(

View File

@ -18,7 +18,7 @@ public class DrawableSpan extends ReplacementSpan {
public static final int ALIGN_BOTTOM = 0; public static final int ALIGN_BOTTOM = 0;
public static final int ALIGN_BASELINE = 1; public static final int ALIGN_BASELINE = 1;
public static final int ALIGN_CENTER = 2; public static final int ALIGN_CENTER = 2; // will only center if drawable height is less than text line height
private final Drawable drawable; private final Drawable drawable;
private final int alignment; private final int alignment;
@ -79,7 +79,7 @@ public class DrawableSpan extends ReplacementSpan {
try { try {
final int translationY; final int translationY;
if (ALIGN_CENTER == alignment) { if (ALIGN_CENTER == alignment) {
translationY = (int) (b / 2.F + .5F); translationY = b - ((bottom - top - drawable.getBounds().height()) / 2);
} else if (ALIGN_BASELINE == alignment) { } else if (ALIGN_BASELINE == alignment) {
translationY = b - paint.getFontMetricsInt().descent; translationY = b - paint.getFontMetricsInt().descent;
} else { } else {