上一篇http://blog.youkuaiyun.com/github_27372715/article/details/47313931
说了通过控件组合和输入框的监听实现显示字数的输入框,项目中有多个页面需要这个控件,就直接做成单独的控件。
通过实现也了解了自定义控件相关的东西。
先上代码
/**
* Created by bkzhou on 15-8-11.
* app:maxsize=""设置最大字数
*/
public class NumberEditView extends RelativeLayout{
private IhaveuTextView numberText;
private EditText mEditText;
private int MAXWORDS;
public NumberEditView(Context context) {
super(context);
}
public NumberEditView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.NumberEditView);
MAXWORDS = typedArray.getInt(R.styleable.NumberEditView_maxSize,100);
int minHeieht = (int) typedArray.getDimension(R.styleable.NumberEditView_minHeight, 190);
LayoutInflater.from(context).inflate(R.layout.show_number_edit, this);
numberText = (IhaveuTextView) findViewById(R.id.show_number_num);
mEditText = (EditText) findViewById(R.id.show_number_edit);
MeasureTextUtil.setFont(mEditText, 0);//这是设置字体可以忽略
numberText.setText(MAXWORDS+"");
mEditText.setHeight(minHeieht);
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
int number = MAXWORDS - s.length();
numberText.setText(number + "");
if (number < 0) {
numberText.setTextColor(Color.RED);
} else {
numberText.setTextColor(getResources().getColor(R.color.gray_828585));
}
}
});
}
/**
* 获取内容
* @return
*/
public String getText (){
return mEditText.getText().toString();
}
/**
* 设置内容
* @param text
*/
public void setText(String text){
mEditText.setText(text);
mEditText.setSelection(text.length());
}
/**
* 获取编辑框
* @return
*/
public EditText getEditText(){
return mEditText;
}
/**
* 获取剩余字数
* @return
*/
public int getRemnant(){
return MAXWORDS-mEditText.getText().length();
}
/**
* 设置光标到最后
*
*/
public void setSelection() {
mEditText.setSelection(mEditText.getText().length());;
}
}
attrs的文件
<!--显示剩余字数的编辑框-->
<declare-styleable name="NumberEditView">
<attr name="minHeight" format="dimension"/>
<attr name="maxSize" format="integer"/>
</declare-styleable>
使用:
<com.ihaveu.ui.NumberEditView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/white"
android:id="@+id/editintroduce_edit"
app:minHeight="160dp"
app:maxSize="200"
/>
通过做这个组合的自定义控件学会了自定义属性的使用
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.NumberEditView);//绑定属性资源
MAXWORDS = typedArray.getInt(R.styleable.NumberEditView_maxSize,100);//获取xml的设置
在attrs中定义属性name对应属性名,format对应格式(dimension)是尺寸dp
简单的显示字数,也可以改成具有清空按钮的输入框等控件