在Android中的Textview中将drawable留给文本

时间:2014-03-27 15:30:10

标签: android xml

我有一个文本视图和一个可绘制的“点”,现在当我用Text填充Textview时,当文本较小时,drawable有时会移到最左边,而有时接近文本时文字很大

我已经通过android将drawable留给了TextView:drawableLeft =" @ drawable / blue" 我想在textView中的文本前设置为仅8个密度像素 当Text变为2到3行时,它出现在TextView的中心,我希望它在第一行的左边。 请提出任何建议

<TextView
    android:id="@+id/name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/numberLookup"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="60dp"
    android:drawableLeft="@drawable/blue"
    android:ems="10"
    android:fontFamily="sans-serif"
    android:gravity="center"
    android:textIsSelectable="false"
    android:textSize="23sp"
    android:textStyle="bold"
    android:visibility="visible" />

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

drawableLeft的正常行为是向左下角落下。相反,您可以在文本的开头设置ImageSpan

final Spannable spannable = new SpannableString(getText(R.string.yourText));
spannable.setSpan(new ImageSpan(getDrawable(R.drawable.icon)), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannable);

如果您有一个多行文字,其中每一行都应以点可绘制开头,您可以创建一个LeadingMarginSpan

public final class DotSpan implements LeadingMarginSpan {

    private final Bitmap mSpan;

    private final int mMargin;

    public DotSpan(final Bitmap span) {
        mSpan = span;
        mMargin = span.geWidth();
    }

    @Override
    public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top,
            int baseline, int bottom, CharSequence text, int start, int end,
            boolean first, Layout layout)
    {
        if (first) {
            c.drawBitmap(mSpan, x, top, p); //not sure about coordinates if they are correct
        }
    }

    @Override
    public int getLeadingMargin(boolean first)
    {
        return mMargin;
    }
}

并设置为

final Spannable spannable = new SpannableString(getText(R.string.yourMultilineText));
spannable.setSpan(new DotSpan(bitmap), 0, spannable.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
textView.setText(spannable);