如何实现android EditText允许输入字母和数字,同时默认弹出数字键盘?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现android EditText允许输入字母和数字,同时默认弹出数字键盘?相关的知识,希望对你有一定的参考价值。
参考技术A 这个问题看似简单,不过由于android输入法的开放性,许多输入法相关的参数设置是由第三方输入法来实现的,而第三方输入法众多、实现不一,导致这个问题变得很复杂。
结论是,目前来看,并没有直接的方法,可以对所有输入法实现上述需求。
不过针对这个问题,我们有以下几种处理方案:
设置android:digits属性,允许输入数字和字母。
设置android:inputType为"number",将键盘切换为数字键盘。
这里的关键是,虽然单独设置android:inputType="number"时,只允许输入数字;但同时设置android:inputType和android:digits时,允许输入的字符是以android:digits为准的。
当输入法本身的UI允许在数字键盘、字母键盘间切换时,该方案是有效的;但是一些输入法的数字键盘不能切换到字母键盘,该方案失效;特别是,Android5.0的原生输入法就是如此,数字键盘UI没有提供切换到其他键盘的按钮。
虽然该方案对一些输入法(尤其是英文输入法)无效,但是中文输入法基本都是有效的。如果APP仅在国内用的,这个方案够用了
方案一失效的主要原因是,输入法界面中没有提供切换键盘的按键,所以我们可以自己添上按键。
带来的问题是,自己添加按键,很难与输入法保持统一的UI风格;而当输入法本身有键盘切换按键时,这个方案是画蛇添足,既怪异又不美观。 所以这个方案在UI上有严重缺陷,并不实用。
效果图如下:
Activity如下:
activity_main.xml如下:
自定义键盘可以彻底解决问题,是最完美的方案;但是复杂度有点高。
默认弹出数字键盘真的有那么重要么?没有的话,干脆不要折腾了,StackOverflow上那么多人已经证明这个问题无完美解了。
android布局_EditText
实现内容:
1.如何使用圆角输入框和按钮背景
2.如何实现“手机号”、“密码”后面的竖线
3.如何监听输入框的输入事件及删除按钮的动态显示隐藏
1.如何使用圆角输入框和按钮背景
安卓为开发者准备了shape这个xml标签,用于自定义一些形状。
那么我就来定义一个白色的输入框背景。代码如下:
<!-- 形状 --> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#ffffff" /> <!-- 边框 --> <stroke android:width="1dip" android:color="#ffffff" /> <!-- 内填充颜色 --> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> <!-- 圆角 --> <corners android:radius="6dp" /> </shape>
将其设置成任何View的background就可以了
android:background="@drawable/shape_wihte_frame"
2.如何实现“手机号”、“密码”后面的竖线
这个其实很简单,只需书写一个竖线即可,宽度为1dp或者1px(或你认为更合适的数值)。
<View android:id="@+id/view1" android:layout_width="1dip" android:layout_height="fill_parent" android:layout_centerVertical="true" android:layout_gravity="center_horizontal" android:layout_marginLeft="2dp" android:layout_marginRight="2dp" android:layout_toRightOf="@+id/textView1" android:background="#EEEFFF" />
3.如何监听输入框的输入事件及删除按钮的动态显示隐藏
思想很简单,就是监听EditText的输入事件,之后如果输入长度大于0就显示后面的删除按钮,如果=0就隐藏删除按键,点击删除按钮就清空输入框。在这里我写出了一个工具类方便大家调用。高内聚低耦合是我们共同的追求。
public class EditTextClearTools { public static void addclerListener(final EditText e1, final ImageView m1) { e1.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub // 监听如果输入串长度大于0那么就显示clear按钮。 String s1 = s + ""; if (s.length() > 0) { m1.setVisibility(View.VISIBLE); } else { m1.setVisibility(View.INVISIBLE); } } }); m1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // 清空输入框 e1.setText(""); } }); } }
主程序代码
public class MainActivity extends Activity { EditText e1, e2; ImageView m1, m2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_user_login); init(); } private void init() { // TODO Auto-generated method stub e1 = (EditText) findViewById(R.id.phonenumber); e2 = (EditText) findViewById(R.id.password); m1 = (ImageView) findViewById(R.id.del_phonenumber); m2 = (ImageView) findViewById(R.id.del_password); // 添加监听器 EditTextClearTools.addclerListener(e1, m1); EditTextClearTools.addclerListener(e2, m2); } }
代码连接http://download.csdn.net/detail/androidmsky/9274037
转载于http://blog.csdn.net/androidmsky/article/details/49870823
以上是关于如何实现android EditText允许输入字母和数字,同时默认弹出数字键盘?的主要内容,如果未能解决你的问题,请参考以下文章