要通過代碼實現EditText的功能擴展,可以通過自定義一個EditText的子類,然后在子類中添加需要的功能。以下是一個示例代碼,可以實現在EditText中顯示提示文字,并且在獲取焦點時隱藏提示文字的功能:
public class HintEditText extends AppCompatEditText {
private String hintText;
public HintEditText(Context context) {
super(context);
}
public HintEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public HintEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
private void init(Context context, AttributeSet attrs) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.HintEditText);
hintText = a.getString(R.styleable.HintEditText_hintText);
a.recycle();
setHint(hintText);
setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
setHint("");
} else {
setHint(hintText);
}
}
});
}
}
在上面的代碼中,我們自定義了一個名為HintEditText的EditText子類,并添加了一個屬性hintText用于設置提示文字。在init方法中,我們通過獲取attrs中的hintText屬性來設置提示文字,并在獲取焦點時根據hasFocus的值來控制提示文字的顯示和隱藏。最后,我們在構造方法中調用init方法來初始化控件。