TextView控件 - CSDN博客 https://blog.csdn.net/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簡介 - CSDN博客 https://blog.csdn.net/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);// 隱藏輸入法
}
}
}