TextView控件 - 优快云博客 https://blog.youkuaiyun.com/An_nAl/article/details/78094430
当手机屏幕旋转后,Android系统自动会保存文本输入框中的文字、光标位置等等信息。
修改回车键的文字为“搜索”
xml中设置下列两个属性后,回车键的文字则显示为“搜索”二字:
android:singleLine="true"
android:imeOptions="actionSearch"
文字改为“转到”android:imeOptions="actionGo"
捕获回车键
activity中设置捕获操作事件:
(1)方法一:
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
//你想在回车后操作的事件。。。
return true;
}
return false;
}
});
(2)方法二:
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
//你想在回车后操作的事件。。。
}
return false;
}
});
监听文字内容变化
edPassword.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) {
if (StringUtil.isEmpty(s.toString())) {
} else {
}
}
});
给EditText添加样式
drawable新建样式xml给EditText设置background就行啦
详情请参见Button简介 - 优快云博客 https://blog.youkuaiyun.com/An_nAl/article/details/80251116
控制行数
借鉴与:android:ellipsize的使用 - 孤鹤+ - 博客园 https://www.cnblogs.com/chiao/archive/2011/08/20/2147250.html
EidtText和textview中内容过长的话自动换行,使用android:ellipsize与android:singleine可以解决,使只有一行。
在xml中:
android:singleline = "true"
android:ellipsize = "end" 省略号在结尾
android:ellipsize = "start" 省略号在开头
android:ellipsize = "middle" 省略号在中间
android:ellipsize = "marquee" 跑马灯
在代码中:
tv.setEllipsize(TextUtils.TruncateAt.valueOf("END"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("START"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MARQUEE"));
tv.setSingleLine(true);
控制小数点前后的位数
public class MyWatcher implements TextWatcher {
private int beforeDot;
private int afterDot;
/**
* 构造器
*
* @param beforeDot 小数点前位数 不限制输入-1
* @param afterDot 小数点后位数 不限制输入-1
*/
public MyWatcher(int beforeDot, int afterDot) {
this.beforeDot = beforeDot;
this.afterDot = afterDot;
}
@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) {
judge(s);
}
private void judge(Editable editable) {
String temp = editable.toString();
int posDot = temp.indexOf(".");
//直接输入小数点的情况
if (posDot == 0) {
editable.insert(0, "0");
return;
}
//连续输入0
if (temp.equals("00")) {
editable.delete(1, 2);
return;
}
//输入"08" 等类似情况
if (temp.startsWith("0") && temp.length() > 1 && (posDot == -1 || posDot > 1)) {
editable.delete(0, 1);
return;
}
//不包含小数点 不限制小数点前位数
if (posDot < 0 && beforeDot == -1) {
//do nothing 仅仅为了理解逻辑而已
return;
} else if (posDot < 0 && beforeDot != -1) {
//不包含小数点 限制小数点前位数
if (temp.length() <= beforeDot) {
//do nothing 仅仅为了理解逻辑而已
} else {
editable.delete(beforeDot, beforeDot + 1);
}
return;
}
//如果包含小数点 限制小数点后位数
if (temp.length() - posDot - 1 > afterDot && afterDot != -1) {
editable.delete(posDot + afterDot + 1, posDot + afterDot + 2);//删除小数点后多余位数
}
}
}
使用
ed.addTextChangedListener(new MyWatcher(-1, 1));//小数点前位数不限制,小数点后位数设置为1
控制输入的文本类型
比如:设置输入的内容必须为数字
1、代码设置::
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
2、xml设置:
android:inputType="number"
控制输入的文本长度
比如:设置输入的内容长度最多为11。
1、代码设置::
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(11)});
2、xml设置:
android:maxLength="11"
文本输入框是否获取焦点
mEdSearch为EditText控件
/**
* 文本输入框是否获取焦点
*
* @param isGet 获取到焦点:显示输入变盘、显示历史浏览列表、隐藏法规分组列表
*/
private void setEdSearchGetFocus(boolean isGet) {
if (isGet) {
mEdSearch.setFocusable(true);//设置输入框可聚集
mEdSearch.setFocusableInTouchMode(true);//设置触摸聚焦
mEdSearch.requestFocus();//请求焦点
mEdSearch.findFocus();//获取焦点
} else {
mEdSearch.setFocusable(false);//设置输入框不可聚焦,即失去焦点和光标
}
}
控制只能输入数字字母和汉字
正则表达式:
/**
* 控制只能输入数字字母和汉字
*/
private String stringFilter(String str) throws PatternSyntaxException {
//数字字母和汉字
String regEx = "[^a-zA-Z0-9\\u4E00-\\u9FA5]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return m.replaceAll("").trim();
}
给EditText控件添加文字改变监听addTextChangedListener
mEdSearch.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) {
try {
String text = mEdSearch.getText().toString();
String str = stringFilter(text.toString());
if (!text.equals(str)) {
mEdSearch.setText(str);
mEdSearch.setSelection(str.length());
}
}catch (Exception e){
}
}
@Override
public void afterTextChanged(Editable s) {
String searchContent = s.toString(); //文本输入框中的全部文字
}
});
是否显示键盘
/**
* 是否显示键盘
*/
private void showSoftInput(boolean isShow){
InputMethodManager mInputMethodManager = (InputMethodManager) mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);//输入法管理器
if (isShow) {
if (mInputMethodManager != null) {
mInputMethodManager.showSoftInput(mEdSearch, InputMethodManager.SHOW_FORCED);// 显示输入法
}
} else {
if (mInputMethodManager != null && mInputMethodManager.isActive()) {
mInputMethodManager.hideSoftInputFromWindow(mEdSearch.getWindowToken(), 0);// 隐藏输入法
}
}
}