■EditText编辑框
1.概述:可编辑的文本框。
2.颜色背景:
(1)要去掉默认背景:(设置背景)
方法一:设置新的背景,android:background="#00000000"
方法二:设置背景为空,android:background="@null"
(2)提示信息文字的颜色:
android:textColorHint="#ffff00" // 默认为灰色
(3)被选中文字的底色:
android:textColorHighlight="#cccccc" // 默认为蓝色
3.光标:
(1)默认有光标,有时只是光标颜色跟背景颜色一样而“被隐蔽了”。
(2)光标可改为图标:属性textCursorDrawable。
(3)将光标移到文本的末端:
方法一:
1)et.setText(text);
// 在当前界面所有EditText设置默认文本(或获取焦点)之后调用
2)et.requestFocus();
方法二:
1)et.setText(text);
2)et.setSelection(text.length());)
(4)让光标移到点击的位置:
etInput.requestFocusFromTouch();
(5)隐藏光标:
android:cursorVisible="false"
4.焦点:
(1)同个界面中,唯一的EditText默认先自动获得焦点;
若同个界面中,有多个EditText,则默认第一个自动获得焦点。
(2)强行获取焦点:
含有<requestFocus />EditText的最先获得焦点,格式如下:
<EditText 某某属性配置>
<requestFocus />
</EditText>
注意:<requestFocus/>作为子标签(不是属性):
(3)强行移除焦点:
方法一:在该EditText的父级控件或父控件中的另外一个控件,
也可以找父级控件外面的控件,
设置给该控件设置如下属性即可:
android:focusable="true"
android:focusableInTouchMode="true"。
方法二:在该EditText上方(同一个父控件内部)加个隐藏的LinearLayout。
<LinearLayout
android:layout_width="0px"
android:layout_height="0px"
android:focusable="true"
android:focusableintouchmode="true">
</LinearLayout>
<EditText 某某属性配置 />
5.输入类型的限定:
android:inputType :指定输入法的类型,用“|”选择多个。
6.控制软键盘:
(1)键盘若是开着则关闭;若是关着则弹出。
控制代码如下:
public class KeyBoardUtils{
private KeyBoardUtils() {}
/**键盘若是开着则关闭;若是关着则弹出*/
public static void colseInputMethod(Context context) {
InputMethodManager imm = (InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}
处理示例代码如下:
tvNavSearch.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
KeyBoardUtils.colseInputMethod(NavMapAty.this);
}
}
});
(2)只会关闭软键盘。
public class KeyBoardUtils{
private KeyBoardUtils() {}
/**
* 只会关闭软键盘
* @param context 上下文
* @param view 依附的view
*/
public static void colseInputMethod(Context context, View view) {
InputMethodManager imm = (InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()){
imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}
调用代码如下:
KeyBoardUtils.colseInputMethod(thisAty,rvEdit);
(3)点击输入框外面位置即关闭键盘。
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
View view = getCurrentFocus();
// 调用方法判断是否需要隐藏键盘
KeyBoardUtils.hideKeyboard(ev, view, AboutKeyBoardActivity.this);
break;
default:
break;
}
return super.dispatchTouchEvent(ev);
}
/**
* 根据传入控件的坐标和用户的焦点坐标,判断是否隐藏键盘。
* 若点击的位置在控件外,则隐藏键盘;
* 若点击的位置在控件内,则不隐藏键盘。
*
* @param view 控件view
* @param event 焦点位置
* @return 是否隐藏
*/
public static void hideKeyboard(MotionEvent event, View view, Activity activity) {
try {
if (view != null && view instanceof EditText) {
int[] location = {0, 0};
view.getLocationInWindow(location);
int left = location[0], top = location[1], right = left
+ view.getWidth(), bootom = top + view.getHeight();
// 判断焦点位置坐标是否在空间内,如果位置在控件外,则隐藏键盘
if (event.getRawX() < left || event.getRawX() > right
|| event.getY() < top || event.getRawY() > bootom) {
// 隐藏键盘
IBinder token = view.getWindowToken();
InputMethodManager inputMethodManager = (InputMethodManager) activity
.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(token,
InputMethodManager.HIDE_NOT_ALWAYS);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
7.软键盘右下角(Enter键)的图标:
(1)键盘图标的显示:
android:imeOptions :指定输入法窗口中的回车键的功能图标。
可选值为normal,
actionUnspecified, // 未指定==》“回车”(EditorInfo.IME_ACTION_UNSPECIFIED)
actionNone,//没有动作==》“”(EditorInfo.IME_ACTION_NONE)
actionGo,//去往==》“去往/开始/前往”(EditorInfo.IME_ACTION_GO)
actionSearch,//搜索,“搜索图标/搜索”......
actionSend,//发送,“发送”......
actionNext,//下一个,“下一个”......
actionDone。//完成,“完成”......
方法一,Xml中:
设置下面两个属性中的一个即可使这个属性imeOptions生效:
1 将singleLine设置为true
2 将inputType设置为text
<EditText
android:id="@+id/editText"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:imeOptions="actionSearch"
android:inputType="text"
android:singleLine="true"
/>
方法二,Java中:
et.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
et.setInputType(EditorInfo.TYPE_CLASS_TEXT);
et.setSingleLine(true);
(2)键盘图标的监听:
在代码中用et.setOnEditorActionListener方法,比如搜索:
et.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// 执行搜索任务
}
return false;
}
});
8.监听输入变化:
可应用于显隐清除图标和输入匹配。
/*
* 搜索目的地(商家位置)时,监听搜素框文本变化,改变搜索按钮文本
*/
class searchTextWatcher implements TextWatcher {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//text 输入框中改变前的字符串信息
//start 输入框中改变前的字符串的起始位置
//count 输入框中改变前后的字符串改变数量一般为0
//after 输入框中改变后的字符串与起始位置的偏移量
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//text 输入框中改变后的字符串信息
//start 输入框中改变后的字符串的起始位置
//before 输入框中改变前的字符串的位置 默认为0
//count 输入框中改变后的一共输入字符串的数量
}
@Override
public void afterTextChanged(Editable edit ) {
//edit 输入结束呈现在输入框中的信息
if (edit .toString().isEmpty()) {
tvNavSearchCancle.setText("取消"); // 这时也可以隐藏清空图标
} else {
tvNavSearchCancle.setText("搜索"); // 这时也可以显示清空图标
}
}
}
9.监听焦点变化:
可应用于确定输入完成或退出当前界面后执行某些动作。
et.setOnFocusChangeListener(
new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
if (!b) {
// 失去焦点的操作
}
}
});
10.动态限制显示或隐藏密码:
1).在xml设置:
<EditText
android:id="@+id/etPwd "
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:password="true"/>
2).在Java设置:
// 设置为明文
etPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
// 设置为密文
etPwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
11.限制字数:
(1)在xml中,可这样:android:maxLength=180;
(2)在Java中,可这样:etInput.setFilters(new InputFilter[]{new InputFilter.LengthFilter(100)});
12.限定输入指定字符:
比如:只能输入“1234567890"和"/”。
<EditText
......
android:digits="1234567890/"
....../>