我有一个文本视图和一个可绘制的“点”,现在当我用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" />
有人可以帮助我吗?
答案 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);