gpt4 book ai didi

android - 你如何在 android 中为 textview 的百分比着色?

转载 作者:搜寻专家 更新时间:2023-11-01 08:12:23 24 4
gpt4 key购买 nike

我知道 Spannable 可以帮助我为 TextView 中的任何特定字母着色。但是,是否可以给字母的 1/2 或 1/3 着色?我想按百分比而不是字母为 TextView 中的文本着色。感谢阅读,如果您对此有任何想法或解决方案,请告诉我。

谢谢

最佳答案

使用Spanned思想可能更容易 android.text.HTML

<罢工>

所以像这样:

Spanned text = HTML.fromHtml("Sp<span style=\"color:red\">ann</span>able");
textView.setText(text);

也可以用来添加图片,但是比较复杂。


更新

我重新阅读了您的问题并想到了解决方案。您可以创建一个包含两个 textView 的自定义 View s 在 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;
}

希望这个有用;)

关于android - 你如何在 android 中为 textview 的百分比着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8582839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com