我知道Spannable可以帮助我为textview中的任何特定字母着色。但是,是否可以为字母的1/2或1/3着色。我希望在文本视图中按百分比而不是字母为文本着色。感谢您阅读,如果您对此有任何想法或解决方案,请告诉我。
感谢
答案 0 :(得分:3)
使用跨越思维android.text.HTML
这样的事情:
Spanned text = HTML.fromHtml("Sp<span style=\"color:red\">ann</span>able");
textView.setText(text);
它也可用于添加图像,但有点复杂。
<强>更新强>
我重新阅读了你的问题并想到了一个解决方案。您可以创建一个自定义视图,其中textView
中有两个FrameLayout
(彼此重叠),然后相对于百分比调整顶部的大小。像这样:
import android.content.Context;
import android.content.res.ColorStateList;
import android.util.AttributeSet;
import android.widget.FrameLayout;
import android.widget.TextView;
public class ProgressTextView extends FrameLayout {
private TextView backgroundTextView;
private TextView foregroundTextView;
private CharSequence text;
private ProgressTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context, attrs);
}
private ProgressTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
private ProgressTextView(Context context) {
super(context);
init(context, null);
}
private void init(Context context, AttributeSet attrs) {
backgroundTextView = new TextView(context);
foregroundTextView = new TextView(context);
addView(backgroundTextView);
addView(foregroundTextView);
// process custom attributeSet from xml to set the colours
}
public void setBackgroundTextColor(int color) {
backgroundTextView.setTextColor(color);
}
public void setBackgroundTextColor(ColorStateList colors) {
backgroundTextView.setTextColor(colors);
}
public void setForegroundTextColor(int color) {
backgroundTextView.setTextColor(color);
}
public void setForegroundTextColor(ColorStateList colors) {
backgroundTextView.setTextColor(colors);
}
public void setPercentage(float per) {
foregroundTextView.setWidth((((float) backgroundTextView.getWidth()) / 100f) * per);
}
public void setText(CharSequence text) {
this.text = text;
backgroundTextView.setText(text);
foregroundTextView.setText(text);
}
public CharSequence getText() {
return text;
}
}
PS:没有经过测试;)只是一个想法
更新
显然,使用这种方法可以缩短文本,而不是按照我的预期裁剪。也许在创建foregroundTextView时你可以这样做:
foregroundTextView = new TextView(context) {
@Override
protected void onDraw (Canvas canvas) {
super.onDraw(canvas);
Rect bounds = canvas.getClipBounds();
bounds.right (((float) bounds.right) / 100.0f) * per;
canvas.clipRect(bounds);
}
};
并添加per
变量并修改setPercentage(float per)
只是一个制定者:
private float per = 0.0f;
public void setPercentage(float per) {
this.per = per;
}
希望这个有效;)
答案 1 :(得分:2)
你可以在画布上自己画字母。每个字母由一堆相互连接的弧组成,这样你就可以单独设置每个弧的样式。
必须绘制每个字母都是相当费力的,例如paint.setColor(),canvas.drawArc(),paint.setColor(),canvas.drawArc()等等......
答案 2 :(得分:-1)
创建一个drawable并覆盖它的onDraw方法并绘制画布的方式并将其设置为textview的背景