1. //编辑框每次选择都全部选中
android:selectAllOnFocus="true"//设置属性,当获取焦点时全部选中
编辑框的点击监听中添加
info_text.setText(info_text.getText().toString());//添加这句后实现效果
info_text.selectAll();
2. android:inputType="numberDecimal"//设置只能输入数字且不能输入负数
3. //点击EditText阻止键盘弹出
public voidsetEditTextNoInputMethod(EditText editText) {
InputMethodManager imm =(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(),0);
editText.setInputType(0);
}
4. khEdittext.setSelection(khEdittext.getText().toString().length());//设置输入位置在末尾
5.j进入界面默认不弹出输入框<activity
android:name="com.zy.liansuo.activity.xp.Activity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >//默认不弹出输入框
</activity>
6.软键盘不遮盖输入框:
可以通过在清单文件中Activity注册时使用windowSoftInputMode属性
在默认情况下会遮住输入框此时的属性值是:stateUnspecified
不指定软键盘的状态(隐藏还是可见)。将由系统选择合适的状态,或依赖主题中的设置。这是对软键盘行为的默认设置。
不会遮住
设置属性值:adjustResize
始终调整Activity主窗口的尺寸来为屏幕上的团键盘腾出空间。
设置属性值:adjustPan
不调整Activity主窗口的尺寸来为软件盘腾出空间,而是自动平移窗口的内容,是当前焦点永远不被键盘遮盖,让用户始终看到输入内容。这通常不如尺寸调整可取,因为用户可能需要关闭软件盘以达到被遮盖的窗口部分或与这些部分进行交互。
· adjustResize失效情况:activity 设置了全屏属性指Theme.Light.NotittleBar.Fullscreen 或者设置了 activity 对应的主题中 android:windowTranslucentStatus 属性,设置方式为:android:windowTranslucentStatus=true,这时如果对应的页面上含有输入框,将会导致点击输入框时软键盘弹出后键盘覆盖输入框,导致输入框看不见。
fitsSystemWindows=”true”,只有初始的view起作用:如果在布局中不是最外层控件设置fitsSystemWindows=”true”, 那么设置的那个控件高度会多出一个状态栏高度。若有多个view设置了,因第一个view已经消耗掉insect,其他 view 设置了也会被系统忽略
7.输入长度限制
android:maxLength="2"
8.两行限制:
android:maxLines="2"
android:ellipsize="end"
9.单行显示
android:singleLine="true"/./单行显示
ndroid:ellipsize="end"当限定试显示行数时省略多余文字的位置,是省略号在开头还是结尾。
10.控制输入内容:不可输入“,”中文逗号
myspinner_showdata.setFilters(new InputFilter[] { new InputFilter() {
new InputFilter[] { new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
if(",".equals(source)){
return ",";
}
return source;
}
}});
filter就是过滤器,对于EditText我们可以限制输入内容或者说制定输入规则,若我们在布局中限制了字符长度,而在代码中有添加了filter限制,则长度设置就没有效果了,此时我们必须在filter上做上长度限制才可以。
setFilter设置的是filter数组,即可以设置多个规则,我们可以定义一个类实现InputFilter重写 filter方法,在其中写规则。
filter方法中参数意义
source新输入的字符串
start新输入的字符串起始下标,一般为0
end新输入的字符串终点下标,一般为source长度-1
dest输入之前文本框内容
dstart原内容起始坐标,一般为0
dend原内容终点坐标,一般为dest长度-1
限制长度的方法
setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)});
11.只能输入中文,通过Edittext的digits属性控制输入内容
在string.xml添加:
<string name="cesh">0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.@,~-:*?!_#/=+&^;{}|\""'\'<\%[] \>()$\"</string>这个基本包含了所有的非中文字符
其中
" (" 或 ")
' (' 或 ')
& (& 或 &)
< (< 或 <)
> (> 或 >)
然后对控件设置digits属性
<EditText
android:id="@+id/myspinner_showdata"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:gravity="center_vertical"
android:paddingLeft="5dp"
android:paddingRight="65dp"
android:background="@drawable/biankuang"
android:digits="@string/cesh"
android:text="" />
就可以了
12.两个编辑框之间相互影响修改
借鉴网络上的方法,这个需要熟悉编辑框的回调的三个方法的执行顺序,还有监听的移除监听的使用
edit_two = (EditText) findViewById(R.id.edit_two);
edit_one = (EditText) findViewById(R.id.edit_one);
edit_one.setText("你好");
edit_two.setText("测率");
one = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
edit_two.removeTextChangedListener(two);
edit_two.setText(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
edit_two.addTextChangedListener(two);
}
};
two = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
edit_one.removeTextChangedListener(one);
edit_one.setText(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
edit_one.addTextChangedListener(one);
}
};
edit_two.addTextChangedListener(two);
edit_one.addTextChangedListener(one);
13.设置输入框选中后软键盘的搜索按钮展示
在布局中添加
android:imeOptions="actionSearch" 这是现实搜索效果
14.监听输入框的选中后软键盘点击enter或搜索图标
//这是输入框设置点击软键盘的enter键的回调
edit_spm.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
switch (actionId) {
case EditorInfo.IME_NULL:
case EditorInfo.IME_ACTION_SEARCH:
//有search按钮的
String spm = getUnNullString(edit_spm.getText() + "", "");
ShowToast(spm);
if (!"".equals(spm)) {
postSelect(spm);
ShowToast(spm);
}
break;
}
return true;
}
});
还可以监听onKeyDown实现
xs_spm_edittext.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if (i == KeyEvent.KEYCODE_ENTER && keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
String spm=getUnNullString(xs_spm_edittext.getText()+"", "");
if ("".equals(spm)) {
ShowToast("商品码为空");
}
if (ControlClickTimeUtil.isFastDoubleClickThree()) {
return false;
}
LogUtils.v("XsActivity_onKey", spm);
searchBenDi(spm);
xs_spm_edittext.setText("");
xs_spm_edittext.setFocusable(false);
try {
handler.sendEmptyMessageDelayed(1, 300);
} catch (Exception e) {
getFoucus();
}
}
return false;
}
});
15.通过TransformationMethod控制输入框的内容显示
布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.settransformationmethod.MainActivity" >
<EditText
android:id="@+id/edit_content"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<RadioGroup
android:id="@+id/radiogroup_chose"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/rabtn_xs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="显示" />
<RadioButton
android:id="@+id/rabtn_yc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="隐藏" />
<RadioButton
android:id="@+id/rabtn_dx"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="大写" />
<RadioButton
android:id="@+id/rabtn_xx"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="小写" />
<RadioButton
android:id="@+id/rabtn_th"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="替换" />
<RadioButton
android:id="@+id/rabtn_ynr"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="原内容" />
<RadioButton
android:id="@+id/rabtn_xshcf"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="显示回车符" />
<RadioButton
android:id="@+id/rabtn_ychcf"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="不能用换行回车" />
</RadioGroup>
</LinearLayout>
public class MainActivity extends Activity {
private EditText edit_content;
private RadioGroup radiogroup_chose;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit_content = (EditText) findViewById(R.id.edit_content);
radiogroup_chose = (RadioGroup) findViewById(R.id.radiogroup_chose);
radiogroup_chose
.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// 密码显示控制
if (checkedId == R.id.rabtn_xs) {
edit_content
.setTransformationMethod(HideReturnsTransformationMethod
.getInstance());
} else if (checkedId == R.id.rabtn_yc) {
edit_content
.setTransformationMethod(PasswordTransformationMethod
.getInstance());
} else if (checkedId == R.id.rabtn_dx) {
edit_content
.setTransformationMethod(new UpperCapTransformationMethod());
} else if (checkedId == R.id.rabtn_xx) {
edit_content
.setTransformationMethod(new LowerCapTransformationMethod());
} else if (checkedId == R.id.rabtn_th) {
edit_content
.setTransformationMethod(new ChangeTextCapTransformationMethod());
} else if (checkedId == R.id.rabtn_ynr) {
edit_content
.setTransformationMethod(new BackTextCapTransformationMethod());
} else if (checkedId == R.id.rabtn_xshcf) {
edit_content
.setTransformationMethod(new HideReturnsTransformationMethod());
} else if (checkedId == R.id.rabtn_ychcf) {
edit_content
.setTransformationMethod(new SingleLineTransformationMethod());
}
}
});
}
public class UpperCapTransformationMethod extends
ReplacementTransformationMethod {
@Override
protected char[] getOriginal() {
char[] aa = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z' };
return aa;
}
@Override
protected char[] getReplacement() {
char[] cc = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'Y', 'Z' };
return cc;
}
}
public class LowerCapTransformationMethod extends
ReplacementTransformationMethod {
@Override
protected char[] getOriginal() {
char[] cc = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'Y', 'Z' };
return cc;
}
@Override
protected char[] getReplacement() {
char[] aa = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z' };
return aa;
}
}
public class ChangeTextCapTransformationMethod extends
ReplacementTransformationMethod {
@Override
protected char[] getOriginal() {
char[] aa = { '你', '我', '他' };
return aa;
}
@Override
protected char[] getReplacement() {
char[] cc = { '黑', '白', '会' };
return cc;
}
}
public class BackTextCapTransformationMethod extends
ReplacementTransformationMethod {
@Override
protected char[] getOriginal() {
char[] cc = { '黑', '白', '会' };
return cc;
}
@Override
protected char[] getReplacement() {
char[] aa = { '你', '我', '他' };
return aa;
}
}
}
参考:https://blog.youkuaiyun.com/lylodyf/article/details/53036853