您的位置:首页 > 移动开发 > Android开发

关于Android的EditText问题总结

2014-09-02 21:04 405 查看

1、取消Activity中第一个Activity自动聚焦 -- 在Activity中最前面添加一个隐藏的EditText

<!-- 这里是为了不让进入此Activity时,TextEdi天自动聚焦 这里在设置一个隐藏的TextEdit -->

<EditText

android:id="@+id/hidden_editText1"

android:layout_width="wrap_content"

android:layout_height="0dip"

android:layout_alignParentTop="true"

android:layout_alignRight="@+id/listener_textView3"

android:ems="10" />

2、进入Activity后,输入法自动弹出问题

在Android应用中,当跳转到某个Activity时,该Activity显示页面的EditText获得焦点,在某些机器中会触发软键盘的自动弹出。有时候为了更好的用户体验,需要控制在用户点击EditText时才弹出软键盘,即需要才弹出。

在androidminifest文件当中,在需要屏蔽输入法的Activity里添加属性: android:windowSoftInputMode="adjustPan|stateHidden" 。

3、EditText常用属性介绍

1 、EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password=true // 以”.”形式显示文本 (2)在代码里设置: 通过设置EditText的setTransformationMethod()方法来实现隐藏密码或这显示密码。 editText.setTransformat

1、EditText输入的文字为密码形式的设置

(1)通过.xml里设置:

把该EditText设为:android:password="true" //
以”.”形式显示文本

(2)在代码里设置:

通过设置EditText的setTransformationMethod()方法来实现隐藏密码或这显示密码。

editText.setTransformationMethod(PasswordTransformationMethod.getInstance());//设置密码为不可见。

2、(1)EditText输入的文字为电话号码

Android:phoneNumber=”true” //输入电话号码

3、EditText字数限制的设置

(1)在.xml中设置:android:maxLength=“50”

(2)代码中设置:

editText.setFilters(new InputFilter[]{newInputFilter.LengthFilter(100)});

4、EditText设置字体

android:typeface="monospace" //设置字型。字形有:normal, sans, serif,monospace

5、EditText是否可编辑

Android:editable // 是否可编辑

6、在EditText中软键盘的调起、关闭

(1)EditText有焦点(focusable为true)阻止输入法弹出

editText=(EditText)findViewById(R.id.txtBody);

editText.setOnTouchListener(new
OnTouchListener(){

public
boolean onTouch(View v, MotionEvent event){

editText.setInputType(InputType.TYPE_NULL);
//关闭软键盘

return
false;

}

});

(2)当EidtText无焦点(focusable=false)时阻止输入法弹出

InputMethodManager imm =

(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(editText.getWindowToken(),0);

(3)调用数字键盘并设置输入类型和键盘为英文

etNumber.setInputType(InputType.TYPE_CLASS_NUMBER); //调用数字键盘

rlEditText.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);//设置输入类型和键盘为英文

或者:android:inputType="textUri|textMultiLine"

(4)android:focusable="false"//键盘永远不会弹出

<activity android:name=".AddLinkman"android:windowSoftInputMode="adjustUnspecified|stateHidden"/>//不自动弹出键盘

//关闭键盘(比如输入结束后执行)

InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(etEditText.getWindowToken(), 0);

//自动弹出键盘

((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);

etEditText.requestFocus();//让EditText获得焦点,但是获得焦点并不会自动弹出键盘

7、android:layout_gravity和android:gravity的区别

(1)android:layout_gravity是本元素对父元素的重力方向。

(2)android:gravity是本元素所有子元素的重力方向。

8、android:padding和android:layout_margin区别

这两个都可以设置边距,但有细微的区别:

(1)android:padding是相对父view的边距

(2)android:layout_margin是相对同一级View的边距

例:LinearLayout是水平布局,下面有两个按钮,

(a)如果右边的按钮想距左边的按钮15px,因为这两个按钮是同一级的,应该用android:layout_margin;

(b)如果右边的按钮想距左边的距离为350px,应该用android:padding

9、android:numeric//只接受数字

android:numeric来控制输入的数字类型,一共有三种分别为integer(正整数)、signed(带符号整数,有正负)和decimal(浮点数)。

10、Enter键图标的设置

软键盘的Enter键默认显示的是“完成”文本,我们知道按Enter建表示前置工作已经准备完毕了,要去什么什么啦。比如,在一个搜索中,我们输入要搜索的文本,然后按Enter表示要去搜索了,但是默认的Enter键显示的是“完成”文本,看着不太合适,不符合搜索的语义,如果能显示“搜索”两个字或者显示一个表示搜索的图标多好。事实证明我们的想法是合理的,Android也为我们提供的这样的功能。通过设置android:imeOptions来改变默认的“完成”文本。这里举几个常用的常量值:

(1)actionUnspecified未指定,对应常量EditorInfo.IME_ACTION_UNSPECIFIED效果:


(2)actionNone 没有动作,对应常量EditorInfo.IME_ACTION_NONE效果:


(3)actionGo去往,对应常量EditorInfo.IME_ACTION_GO 效果:


(4)actionSearch 搜索,对应常量EditorInfo.IME_ACTION_SEARCH效果:


(5)actionSend 发送,对应常量EditorInfo.IME_ACTION_SEND效果:


(6)actionNext 下一个,对应常量EditorInfo.IME_ACTION_NEXT效果:


(7)actionDone 完成,对应常量EditorInfo.IME_ACTION_DONE效果:


11、使用android:imeOptinos可对Android自带的软键盘进行一些界面上的设置:

android:imeOptions="flagNoExtractUi" //使软键盘不全屏显示,只占用一部分屏幕

同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键

android:imeOptions="actionNone" //输入框右侧不带任何提示

android:imeOptions="actionGo" //右下角按键内容为'开始'

android:imeOptions="actionSearch" //右下角按键为放大镜图片,搜索

android:imeOptions="actionSend" //右下角按键内容为'发送'

android:imeOptions="actionNext" //右下角按键内容为'下一步'

android:imeOptions="actionDone" //右下角按键内容为'完成'

12、限定edittext能输入数字和字母,并且默认输入为数字,如身份证号码

android:inputType="number"

android:digits="0123456789xyzXYZ"

13、软键盘的调起导致原来的界面被挤上去,或者导致界面下面的tab导航被挤上去,解决方法如下

解决方法:

使用Manifest中的Activity的android:windowSoftInputMode的"adjustPan"属性。

另外注意:有关软键盘的问题可参考android:windowSoftInputMode中属性。

14、edittext光标详解

edittext.requestFocusFromTouch();//让光标放入到点击位置。

edittext.requestFocus();//默认方式获得焦点

EditText editor = (EditText)getCurrentView();//光标处插入

int cursor = editor.getSelectionStart();

editor.getText().insert(cursor,delta);

让光标移到末端(这样文字就会向前显示)

EditText et = ...

String text = "text";

et.setText(text);

et.setSelection(text.length());

android:cursorVisible="false" 隐藏光标

android:background="#00000000"//不要文本框背景

4、EditText实例 -- android_文本框实现搜索和清空效果

本文实现的效果:文本框输入为空时显示输入的图标;不为空时显示清空的图标,此时点击清空图标能清空文本框内输入文字。

正文

  一、实现效果

    


    

   

  二、实现代码

    监听输入

/**

* 动态搜索

*/

private TextWatcher tbxSearch_TextChanged = new TextWatcher() {

//缓存上一次文本框内是否为空

private boolean isnull = true;

@Override

public void afterTextChanged(Editable s) {

if (TextUtils.isEmpty(s)) {

if (!isnull) {

mSearchView.setCompoundDrawablesWithIntrinsicBounds(null,

null, mIconSearchDefault, null);

isnull = true;

}

} else {

if (isnull) {

mSearchView.setCompoundDrawablesWithIntrinsicBounds(null,

null, mIconSearchClear, null);

isnull = false;

}

}

}

@Override

public void beforeTextChanged(CharSequence s, int start, int count,

int after) {

}

/**

* 随着文本框内容改变动态改变列表内容

*/

@Override

public void onTextChanged(CharSequence s, int start, int before,

int count) {

}

};
复制代码

    触摸事件

private OnTouchListener txtSearch_OnTouch = new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_UP:

int curX = (int) event.getX();

if (curX > v.getWidth() - 38

&& !TextUtils.isEmpty(mSearchView.getText())) {

mSearchView.setText("");

int cacheInputType = mSearchView.getInputType();// backup the input type

mSearchView.setInputType(InputType.TYPE_NULL);// disable soft input

mSearchView.onTouchEvent(event);// call native handler

mSearchView.setInputType(cacheInputType);// restore input type

return true;// consume touch even

}

break;

}

return false;

}

};
复制代码

    绑定事件

private Drawable mIconSearchDefault; // 搜索文本框默认图标

private Drawable mIconSearchClear; // 搜索文本框清除文本内容图标

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main)

final Resources res = getResources();

mIconSearchDefault = res.getDrawable(R.drawable.txt_search_default);

mIconSearchClear = res.getDrawable(R.drawable.txt_search_clear);

mSearchView = (EditText) findViewById(R.id.txtSearch);

mSearchView.addTextChangedListener(tbxSearch_TextChanged);

mSearchView.setOnTouchListener(txtSearch_OnTouch);

}
复制代码

    代码说明:

      1. 为输入框绑定触摸事件(模拟点击事件捕捉)。通过监听点击区域判断是否点击清空图片,如果在该区域并且文本框不为空,则清空文本框。

      2. 为输入框绑定文本改变事件监听,根据内容改变动态设置图标显示。

      3. 维持清空操作后软键盘状态。

  三、参考

    1. how
to block virtual keyboard while clicking on edittext in android?

  四、小图标下载

    

  


    (右键另存为即可。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: