【问题标题】:Getting extra space while using SpanningString使用 SpanningString 时获得额外空间
【发布时间】:2015-04-14 19:16:52
【问题描述】:

我正在创建一个自定义视图。我需要一个字符串成为可扩展的字符串,以更改字符串一部分的颜色。代码可以编译,但字符串和要着色的部分之间有很长的空格。

代码如下:

String string = mStat1 + "" + mStatValue1;
SpannableString spannableString = new SpannableString(string);
if(mStatValue1<=0) {
     spannableString.setSpan(new ForegroundColorSpan(Color.rgb(183,108,100)), mStat1.length(), string.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
else {
    spannableString.setSpan(new ForegroundColorSpan(Color.rgb(117,205,132)), mStat1.length(), string.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
TextPaint textPaint = createTextPaint(mTextColor, mStatSize, Paint.Align.CENTER);
mDynamicLayout = new DynamicLayout(spannableString, textPaint, mWidthPix/2, Layout.Alignment.ALIGN_NORMAL, 0.0f, 0.0f, false);

这是我得到的视图图像:

我需要消除字符串的彩色部分和剩余字符串之间的间隙。谢谢。

【问题讨论】:

  • 剩余字符串是什么意思?例如是 1 到 6 之间的路径吗?
  • 在“百分比变化”中,该值与标签相比相差甚远。
  • 值和“百分比变化”之间的空格是不需要的。
  • 和它在同一个TextView中?为什么不在 LinearLayout 或 RelativeLayout 中有两个单独的 TextView?

标签: android android-custom-view spannablestring


【解决方案1】:

我认为您的问题与以下几行有关:

TextPaint textPaint = createTextPaint(mTextColor, mStatSize, Paint.Align.CENTER);
mDynamicLayout = new DynamicLayout(spannableString, textPaint, mWidthPix/2, Layout.Alignment.ALIGN_NORMAL, 0.0f, 0.0f, false);

您只是更改文本的颜色,因此您可以使用方法TextView#setTextColor(int color); 使用两个单独的TextView 视图。

【讨论】:

  • 这是一个自定义视图,所以我没有使用 textviews。我正在画布上绘制这些字符串。因此将字符串和值连接起来并显示,以便整个字符串可以居中对齐。
  • 我认为您使用 draw 方法过度杀伤了您的方法。为什么不简单地扩展一个,例如LinearLayout,并通过xml通胀在里面添加视图,最后从这个自定义视图中提供某种API来设置数据?编写一个 onDraw 方法并不是那么简单,涉及的东西很多。你确定这是你想要的吗?
  • 它需要是一个自定义视图,以后可以用于其他模块,因此所有的努力:P
  • 但是我向您建议的也是自定义视图,但构建方式不同。您可以将自定义视图构建为宏(视图 + xml)并在库项目中重新分发它。
  • 这就是我现在所做的。不得不放弃在画布上绘制一切的想法。
猜你喜欢
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多