gpt4 book ai didi

Android - 自定义 EditText 前缀颜色

转载 作者:行者123 更新时间:2023-11-29 19:17:25 26 4
gpt4 key购买 nike

在 SO 和复制粘贴的帮助下,我为我的自定义 EditText 创建了一个前缀修改。

这是前缀的特定代码:

private String mPrefix = "";
private Rect mPrefixRect = new Rect();

public OpenSansEditText(Context context, AttributeSet attrs) {
super(context, attrs);
applyCustomFont(context, attrs);
applyPrefix(context, attrs);
}

public OpenSansEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
applyCustomFont(context, attrs);
applyPrefix(context, attrs);
}


private void applyPrefix(Context context, AttributeSet attrs) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.OpenSansET);
String fontFace;

try {
fontFace = a.getString(R.styleable.OpenSansET_prefix);
} finally {
a.recycle();
}
if (fontFace != null){
mPrefix = fontFace;
} else {
mPrefix = "";
}
}

protected void setmPrefix(String prefix){
this.mPrefix = prefix;
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (!mPrefix.equals("")){
getPaint().getTextBounds(mPrefix, 0, mPrefix.length(), mPrefixRect);
mPrefixRect.right += getPaint().measureText(" "); // add some offset
}

super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (!mPrefix.equals("")) {
canvas.drawText(mPrefix, super.getCompoundPaddingLeft(), getBaseline(), getPaint());
}
}

@Override
public int getCompoundPaddingLeft() {
return mPrefix.equals("") ? super.getCompoundPaddingLeft()
: super.getCompoundPaddingLeft() + mPrefixRect.width();
}

基本上它所做的是,如果我从 xml 或通过代码提供了一个前缀,它会将那个前缀绘制到 EditText 的开头。例如:

<com.asta.classes.OpenSansEditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/min"
app:prefix="$"/>

这段代码产生:

This Image

但问题是,如果我设置 textColorHint,前缀的颜色将与提示的颜色相同,例如:

This Orange Text

如何修改前缀颜色为指定颜色?在我的例子中是让它有自己的颜色而不是使用提示颜色。

最佳答案

更新onDraw方法

例如:

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (!mPrefix.equals("")) {
Paint paint = getPaint();
paint.setColor(color);
canvas.drawText(mPrefix, super.getCompoundPaddingLeft(), getBaseline(), paint);
}
}

关于Android - 自定义 EditText 前缀颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43085708/

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