我已通過SO和複製粘貼的幫助爲我的自定義EditText
創建了前綴修改。Android - 自定義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="$"/>
此代碼生成:
但問題是,如果我設置textColorHint
,前綴的顏色將是一樣的提示一樣的顏色:
如何修改前綴的顏色指定的顏色?在我的情況下,它是讓它有自己的顏色,而不是使用提示顏色。
你可能想作出這樣的'Paint'對象中的字段,以及其他地方對其進行初始化,特別是在「EditText」中。 –
這個伎倆!但是,怎麼樣?編輯:沒關係,所以我只是意識到我盲目地使用getPaint()。但爲什麼'getPaint()'返回提示顏色? –
您可以使用Paint – Pehlaj